一、文本处理_2:grep,sed,awk

壹、文本处理_2:grep,sed,awk

1、sed ‘s/ /\n/g’ test.txt |sort -unr|grep -v ‘^$’|sed -n ‘1p;$p’|sed
-n ‘/15/p’

00玖day–test命令和grep作业及Sed作业awk作业和巡回结构,00九day–testawk

一、test命令

-d :目录                                test  -d  /boot

-s :文件长度 > 0、非空            test  -s  a.txt

-f :正规文件                           test  -f  a.txt

-w :可写                                test  -w  a.txt

-r :可读                                 test  -r   a.txt

-x :可执行                              test  -x  a.txt

-L :符号连接                                     

-u :文件有 suid 位设置

-z :空串

-n :非空串

-eq :等于                               [ 50 -eq 50 ]

-ne :不等于                            [ 50 -ne 60 ]

-gt :大于                                [ 50 -gt 40 ]

-lt :小于                                 [ 50 -lt 60 ]

-ge :大于等于                          [ 50 -ge 50 ]

-le :小于等于                           [ 50 -le 50 ]

比较数字,使用(( ))

其余测试使用 [[ ]]

富含数字比较的搅和测试,使用[[ expr1 && expr2 ]] (( expr1 || expr2 ))

du -sh /boot/                          #查阅文件大小

find / -type f                           #翻开普通文书

find / -name “*.txt”                 #翻看根下以.txt结尾的文件

find / -size +30M                     #找出根下超越30M的文本

find / -size +10M -size +30M    #找出根下超过十M且小于30M的文件

grep -rl  ‘root’ /test                  #在/test下找出含root名的公文

 

二、grep作业

-n:展现行号

-o:只显示相配的始末

-q:静默方式,未有别的输出,得用$?来判断执行成功未有,即有未有过滤到想要的情节

-l:固然相配成功,则只将文件名打字与印刷出来,退步则不打印,日常-rl1起用,grep
-rl ‘root’ /etc 

-A:如若协作成功,则将相称行及将来n行一起打字与印刷出来

-B:要是匹配成功,则将相称行及其前n行一起打字与印刷出来

-C:借使相配成功,则将匹配行及其左右n行壹起打字与印刷出来

-c:假若协作成功,则将非凡到的行数打字与印刷出来

-E:等于egrep,扩展

-i:忽略大小写

-v:取反,不匹配

-w:相配单词

正则表明式及字符处理

指标文件/etc/passwd,使用grep命令或egrep

1.呈现出全体含有root的行:

egrep “root” /etc/passwd

二.出口任何带有bash的具有行,还要输出紧接着那行的左右各两行的情节:

egrep -C 2 “bash” /etc/passwd

  1. 呈现出有多少行含有nologin。

egrep -c “nologin” /etc/passwd

肆.来得出这么些行含有root,并将行号壹块输出。

egrep -n “nologin” /etc/passwd

5.展现出文件中

陆.新建用户
abominable
abominate
anomie
atomize
编写正则表明式,将她们十分出来

egrep “a.omi(nabl|nat|z|)e” /etc/passwd

7.建八个用户
Alex213sb
Wpq2222b
yH438PIG
egon666 egon
过滤出用户名组成是字母+数字+字母的行

egrep ‘^[a-Z]+[0-9]+[a-Z]+’ /etc/passwd

八.突显出/etc目录下具有包涵root的公文名

egrep -rl “/root” /etc

  1. 过滤掉/etc/ssh/sshd_config内全体注释和拥有空行

grep -v ‘^#’ /etc/ssh/sshd_config |grep -v ‘^ *$’

三、Sed作业:以/etc/passwd文件为模板

一,删除文件每行的首先个字符。

sed -r ‘s/^(.)(.*)/\2/’ /etc/passwd

二,删除文件每行的第二个字符。

sed -r ‘s/^(.)(.)(.*)/\1\3/’ /etc/passwd

三,删除文件每行的结尾三个字符。

sed -r ‘s/(.*)(.)$/\1/’ /etc/passwd

四,删除文件每行的倒数第四个字符。

sed -r ‘s/(.*)(.)(.)$/\1\3/’ /etc/passwd

5,删除文件每行的第二个单词。

sed -r ‘s/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\1\2\4/’
/etc/passwd

陆,删除文件每行的尾数第一个单词。

sed -r ‘s/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/\1\3\4/’
/etc/passwd

柒,删除文件每行的最终贰个单词。

sed -r ‘s/([^a-Z]+)([a-Z]+)$/\1/’ /etc/passwd

8,交流每行的第二个字符和第二个字符。

sed -r ‘s/^(.)(.)(.*)/\2\1\3/’ /etc/passwd

九,沟通每行的率先个字符和第1个单词。

sed -r
‘s/^(.)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\4\2\3\1\5/’
/etc/passwd

十,交换每行的率先个单词和末段二个单词。

sed -r
‘s/^([a-Z]+)([^a-Z]+)(.+)([^a-Z]+)([a-Z]+)$/\5\2\3\4\1/’
/etc/passwd

1壹,删除二个文书中保有的数字。

sed -r ‘s/[0-9]+//g’ /etc/passwd

1二,删除每行开端的装有空格。

sed -r ‘s/^ *//g’ /etc/passwd

13,用制表符替换文件中出现的保有空格。

sed -r ‘s/ /\t/g’ /etc/passwd

14,把具有大写字母用括号()括起来。

sed -r ‘s/[A-Z]/(&)/g’ /etc/passwd

壹伍,打字与印刷每行二次。

sed ‘p;p’ /etc/passwd

1陆,隔行删除。

sed ‘1~2d’ /etc/passwd

一7,把公文从第3行到第陆行复制到第拾行后边。(选做题)

sed ‘1h;3,5H;7G’ test

1八,把公文从第三行到第陆行活动到第九行后边。(选做题)

sed ‘2h;3,5H;7G’ test

19,只展现每行的率先个单词。

sed -r ‘s/^([a-Z]+)([^a-Z]+)(.*)$/\1/’ /etc/passwd

20,打字与印刷每行的率先个单词和第6个单词。

sed -r
‘s/^([a-Z]+)([剖析命令,test命令和grep作业及Sed作业awk作业和循环结构。^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)$/\1\
\5/’ /etc/passwd

四、awk作业

打印uid在30~40限制内的用户名。

awk -F: ‘$3>29&&$3<41{print $1}’ /etc/passwd

打字与印刷第五-十行的行号和用户名

awk -F: ‘NR>4&&NR<11{print $1,NR}’ etc/passwd

打字与印刷奇数行

awk -F: ‘NR%2{ print NR,$0}’ /etc/passwd

打印偶数行

awk -F: ‘!(NR%2){print NR,$0}’ /etc/passwd

打印字段数当先5的行

awk -F: ‘NF>5{print NR,$0}’ /etc/passwd

打字与印刷UID不对等GID的用户名

awk -F: ‘$3!=$4{print NR,$1}’ /etc/passwd

if 结构

澳门金沙国际 1

#!/bin/bash

var='/etc/init.d'
#var='/dev/sda'
if [ -d $var ]                              #如果$var是目录文件,则输出$var is directory
    then
        echo "$var is directory"
elif [ -b $var ]                            #如果$var是block块,则输出$var is block
    then
        echo "$var is block"
elif [ -f $var ]                             #如果$var是正规文件,则输出$var is regular file
    then
        echo "$var is regular file"
else                                           #以上都不满足则输出unknow
        echo 'unknow'
fi                                               #fi表示if语句结束

View Code

收下输入参数的if语句

澳门金沙国际 2

#!/bin/bash

if [ -d $1 ]                                  #$1表示输入的第一个参数

    then

        echo "$1 is directory"

elif [ -b $1 ]

    then

        echo "$1 is block"

elif [ -f $1 ]

    then

        echo "$1 is regular file" else echo 'unknown'

fi

View Code

while循环

澳门金沙国际 3

#!/bin/bash

login=0

while [ $login != 1 ]

do

    read -p 'please input your name: ' name                 #输入用户名

    read -p 'please input your password: ' pwd              #输入密码

    if [ -z $name ] || [ -z $pwd ]                                  #判断输入是否有输入为空,返回继续循环

        then

            continue

    fi

    if [ $name == 'mu' ] && [ $pwd == '123' ]              #匹配正确,则输出登录成功

        then

            echo 'login sucessful'

            login=1                                                       #方便退出循环 fi done

View Code

练习while循环

澳门金沙国际 4

#!/bin/bash

var1=AAA

var2=BBB

var3=CCC

while :

do

    clear #清屏

    echo -e "A:${var1}\nB:${var2}\nC:${var3}" #

    temp=$var1

    var1=$var2

    var2=$var3

    var3=$temp

    sleep 1

done

View Code

 

资料来源:http://www.cnblogs.com/linhaifeng/p/6602149.html#_label4

 

一、test命令 -d :目录 test -d /boot -s :文件长度 0、非空 test -s a.txt
-f :正…

2、regular_expression

2、regular_expression

2、sed -n ‘$p’   

3、Test

3、Test

3、sed ‘s/old/new/g’ test.txt   

 

 

4、 sed ‘s/^/& aa/g’   

一、文本处理_2

1、文本处理_2

5、 sed ‘s/$/& aa/g’ 

一、grep
–Linux处理正则表明式的重大程序。正则表明式是壹种标志表示法,用于识别文本形式

一、grep
–Linux处理正则表明式的重要性程序。正则表明式是壹种标志表示法,用于识别文本方式

5、grep ‘^51’ test.txt 

常用选项:

常用选项:

6、grep ’51$’ test.txt 

-w –相称单词的分界

-w –相配单词的疆界

7、grep “^[0-1]” test.txt   

-o –输出相配的这某个,而不是整行

-o –输出相配的那有些,而不是整行

8、 grep ‘^884$’ test.txt    

-i –忽略大小写

-i –忽略大小写

8、grep ‘^$’ test.txt     

-RAV四 –递归,用于搜索目录下的公文

-奥德赛 –递归,用于搜索目录下的文书

9、grep -E ‘([0-9]{1,3}\.){3}[0-9]{3}’ test.txt   

-l –输出符合条件的公文名

-l –输出符合条件的文本名

11、 egrep ‘183|884’ test.txt

-n –彰显相称记录的行号

-n –展现相称记录的行号

10、awk ‘{print $4}’ test.txt     

-v –呈现不符合条件的结果

-v –显示不符合条件的结果

11、awk ‘{print $NF}’ test.txt   

-c –输出相配的笔录的总和

-c –输出相称的笔录的总额

12、awk -F”:” ‘{print $1}’ /etc/passwd

-A –输出下文(after)

-A –输出下文(after)

13、echo “192.168.1.183”   

-B –输出上文(before)

-B –输出上文(before)

*、2echo “192.168.1.183” >> zhj.txt1    

-C –输出上下文(context)

-C –输出上下文(context)

*、cat test.txt |awk  ‘{print “01: “$NF”  02″}’    

-q –不出口结果,常用来规范测试

-q –不出口结果,常用于规范测试

*、find . -maxdepth 6 -type f -name ‘*.txt’ -mtime +30 -exec rm -rf {}
\;

-E
–使用扩充的正则表明式;表明重复的数码时,在大括号前边不必要反斜杠,那样正则表明式就很简短,易读

-E
–使用增添的正则表明式;表达重复的数目时,在大括号前边不必要反斜杠,那样正则表明式就很简短,易读

*、find . -maxdepth 6 -type f -name ‘*.txt’ -mtime -1 -exec cp {}
/root/bb  \;

# grep bin /etc/passwd –把/etc/passwd 中含有 bin 的行列出来

# grep bin /etc/passwd –把/etc/passwd 中隐含 bin 的类别出来

*、find . -maxdepth 1 -size 1M -type d

# grep -w bin /etc/passwd
–对寻找字符有边界限制

# grep -w bin /etc/passwd
–对寻找字符有境界限制

 

# grep -o bin /etc/passwd
–只列出协作到的字符串

# grep -o bin /etc/passwd
–只列出协作到的字符串

# grep -oi nobody /etc/passwd
–将合营到的字符列出,不区分轻重缓急写

# grep -oi nobody /etc/passwd
–将同盟到的字符列出,不区分轻重缓急写

# grep -Odysseyl AUTOSWAP /etc/sysconfig/
–钦定目录里面,哪个文件包括了字符串AUTOSWAP

# grep -奥迪Q伍l AUTOSWAP /etc/sysconfig/
–内定目录里面,哪个文件包含了字符串AUTOSWAP

# grep -n bash /etc/passwd | awk -F:
‘{print $一}’ –找出内定文件中 bash 所在的行的行号

# grep -n bash /etc/passwd | awk -F:
‘{print $一}’ –找出钦赐文件中 bash 所在的行的行号

# grep -n bin /etc/passwd | wc -l
–找出钦点文件中有稍许行李包裹涵了单词bin

# grep -n bin /etc/passwd | wc -l
–找出钦点文件中有多少行李包裹罗了单词bin

# grep -nv bash /etc/passwd –找出
/etc/passwd 中不带有bash 的行

# grep -nv bash /etc/passwd –找出
/etc/passwd 中不包括bash 的行

# grep -c root /etc/passwd
–输出相配行的总额

# grep -c root /etc/passwd
–输出相配行的总数

# grep -A2 mail /etc/passwd
–打字与印刷出钦命文件中蕴藏 mail 的行,同时打出其下部2行

# grep -A2 mail /etc/passwd
–打字与印刷出内定文件中富含 mail 的行,同时打出其下部二行

# grep -B二 mail /etc/passwd –同上,同时打出其上面二行

# grep -B二 mail /etc/passwd –同上,同时打出其上边二行

# grep -C2 mail /etc/passwd
–同上,同时打出其上上面各二行

# grep -C二 mail /etc/passwd
–同上,同时打出其上上边各二行

# grep -q root /etc/passwd
–不出口结果,日常用来脚本中,用来做测试

# grep -q root /etc/passwd
–不出口结果,常常用来脚本中,用来做测试

# echo $? –再次来到值为
0,相配到字符;不然未相称到内定字符

# echo $? –重临值为
0,相称到字符;不然未相称到钦定字符

# ls /bin | grep ‘^.\{5\}$’ –输出 /bin 目录下唯有七个字符的一声令下

# ls /bin | grep ‘^.\{5\}$’ –输出 /bin 目录下唯有多少个字符的指令

# ls /bin | grep -E ‘^.{伍}$’ —
使用扩大的正则表明式

# ls /bin | grep -E ‘^.{伍}$’ —
使用扩张的正则表明式

# grep -Eo ‘/[^:]*nologin$’
/etc/passwd –正则表明式与边界限制组合

# grep -Eo ‘/[^:]*nologin$’
/etc/passwd –正则表明式与境界限制组合

# echo -e “1\n二” — -e,使 echo
使用正则表明式

# echo -e “1\n二” — -e,使 echo
使用正则表达式



# cat lines | grep -v ‘^$’ |grep -vE ‘^\s+$’
–删除含有空格与分包TAB的空白行

# cat lines | grep -v ‘^$’ |grep -vE ‘^\s+$’
–删除含有空格与分包TAB的空白行

 

 

2、sed
–流编辑器,平时用于脚本中

2、sed
–流编辑器,平常用于脚本中

范围点名:不明显钦赐的话,暗许是持有的行;能够是行号;恐怕正则表达式

范围点名:不掌握钦定的话,私下认可是有所的行;能够是行号;恐怕正则表明式

动作钦点:

动作钦命:

d –删除

d –删除

s –替换

s –替换

n –关闭默许的出口

n –关闭私下认可的出口

p –打印

p –打印

e –连续符

e –连续符

-i
–将修改结果写入原作件,暗中同意是将修改结果输出到专业输出

-i
–将修改结果写入原版的书文书,私下认可是将修改结果输出到标准输出

i –在后面插入

i –在前方插入

a –在后头插入

a –在背后插入

-r
–使用增加的正则表达式,使用这几个参数后正则表明式的表示方法会愈加便于。也等于grep 里的 -E

-r
–使用扩充的正则表明式,使用那几个参数后正则表明式的象征方法会愈发惠及。也就是grep 里的 -E

2.1、删除

2.1、删除

# cat /etc/passwd | sed ‘3d’ –删除第 3

# cat /etc/passwd | sed ‘3d’ –删除第 3

# cat /etc/passwd | sed ‘三,$d’ –删除第二 行至最后

# cat /etc/passwd | sed ‘3,$d’ –删除第3 行至最终

# cat /etc/passwd | sed ‘10,20d’ –删除第 10 行至第 20 行

# cat /etc/passwd | sed ‘10,20d’ –删除第 10 行至第 20 行

# head /etc/passwd | cat -n |sed -e 1d
-e 3d –删除第 1 行与第 3

# head /etc/passwd | cat -n |sed -e 1d
-e 3d –删除第 1 行与第 3

2.2、替换

2.2、替换

# echo hello | sed ‘s/l/L/’ –把小写 l
替换到大写 L,只杰出第 1 个 l

# echo hello | sed ‘s/l/L/’ –把小写 l
替换来大写 L,只分外第 一 个 l

# echo hello | sed ‘s/l/L/g’ –相配全数的 l

# echo hello | sed ‘s/l/L/g’ –相称全体的 l

# grep root /etc/passwd | sed ‘s/root/ROOT/’ –为钦点范围,替换全部行第 一 个
root

# grep root /etc/passwd | sed ‘s/root/ROOT/’ –为钦赐范围,替换全体行第 壹 个
root

# grep root /etc/passwd | sed ‘一s/root/ROOT/’ –只替换第 一 行第 1 个
root

# grep root /etc/passwd | sed ‘一s/root/ROOT/’ –只替换第 1 行第 一 个
root

# echo “hello world” | sed ‘s/world//’ –将字符串替换为空

# echo “hello world” | sed ‘s/world//’ –将字符串替换为空

轮换动作的界定:

轮换动作的限量:

s/a/A/ –替换每行第四个a

s/a/A/ –替换每行第一个a

s/a/A/g –替换每行全数a

s/a/A/g –替换每行全体a

s/a/A/三 –替换每行第三个a

s/a/A/3 –替换每行第二个a

s/a/A/3g –替换每第2个至最终2个a

s/a/A/3g –替换每第一个至最终3个a

轮换命令的分割符:

轮换命令的分割符:

相隔符斜杠/
能够换到此外别的的字符,须要留意的是,假如急需处理的数码中含有了分隔符,就务须对该字符举行转义,举例如下:

相隔符斜杠/
能够换到任何别的的字符,必要注意的是,即使须求处理的数目中带有了分隔符,就不可能不对该字符举办转义,举例如下:

# echo /etc/passwd | sed ‘s/\//_/g’ –将字符串中的斜杠替换来下划线

# echo /etc/passwd | sed ‘s/\//_/g’ –将字符串中的斜杠替换来下划线

# echo /etc/passwd | sed ‘s#/#_#g’
–成效同上,使用别的字符作为分隔符

# echo /etc/passwd | sed ‘s#/#_#g’
–成效同上,使用其余字符作为分隔符

贰.三、输出钦定行

2.3、输出内定行

# sed -n ‘1,五p’ /etc/passwd —
-n关闭了暗中认可的输出,然后只输出第2至第陆行

# sed -n ‘1,伍p’ /etc/passwd —
-n关闭了默许的输出,然后只输出第③至第四行

# sed -n ‘/root/p’ /etc/passwd —
输出包括内定关键字的行

# sed -n ‘/root/p’ /etc/passwd —
输出包括钦命关键字的行

2.4、插入

2.4、插入

# cat /etc/passwd | sed ‘5i good
morning’ –在第 五 行前边插入一行

# cat /etc/passwd | sed ‘伍i good
morning’ –在第 5 行前边插入一行

# cat /etc/passwd | sed ‘三a good morning’ –在第 三 行前面插入壹行

# cat /etc/passwd | sed ‘三a good morning’ –在第 三 行后边插入一行

# cat /etc/passwd | sed ‘四i good morning’ | sed ‘叁a good morning’
–通过管道可自由插队

# cat /etc/passwd | sed ‘四i good morning’ | sed ‘三a good morning’
–通过管道可随心所欲插队

# cat /etc/passwd | sed -e ‘四i good
morning’ -e ‘三a good morning’
–也可应用延续符

# cat /etc/passwd | sed -e ‘四i good
morning’ -e ‘三a good morning’
–也可选拔延续符

2.5、正则

2.5、正则

# sed ‘/^.\{5\}x/d’ /etc/passwd | cat -n –删除钦点文件第 陆 个字符为
x 的每行

# sed ‘/^.\{5\}x/d’ /etc/passwd | cat -n –删除钦定文件第 陆 个字符为
x 的每行

# sed -r ‘/^.{5}x/d’ /etc/passwd
–同上

# sed -r ‘/^.{5}x/d’ /etc/passwd
–同上

# echo 123456789ABCDEF | sed -r ‘s/^(.{2})…(.*)$/\1\2/’ –删除第 3
至第 5 的字符

# echo 123456789ABCDEF | sed -r ‘s/^(.{2})…(.*)$/\1\2/’ –删除第 3
至第 5 的字符

# echo 123456789ABCDEF | sed -r ‘s/^(.{2}).(.*)$/\1\2/’ –删除第 3
个字符

# echo 123456789ABCDEF | sed -r ‘s/^(.{2}).(.*)$/\1\2/’ –删除第 3
个字符

# echo 123456789ABCDEF | sed -r ‘s/^(.{2}).{10}(.*)$/\1\2/’
–删除从一个字符初叶的11个字符

# echo 123456789ABCDEF | sed -r ‘s/^(.{2}).{10}(.*)$/\1\2/’
–删除从2个字符早先的十二个字符

# echo abc | sed -r ‘s/[a-z]/\u&/g’
–小写转为大写

# echo abc | sed -r ‘s/[a-z]/\u&/g’
–小写转为大写

# echo ABC | sed -r ‘s/[A-Z]/\L&/g’
–大写转为小写

# echo ABC | sed -r ‘s/[A-Z]/\L&/g’
–大写转为小写

# echo ABC | sed -r ‘s/./\l&/g’
–同上

# echo ABC | sed -r ‘s/./\l&/g’
–同上

# sed -r -e ‘/^$/d’ -e ‘/^\s+$/d’ /path/file –删除空白行 以及
含有空格的空白行

# sed -r -e ‘/^$/d’ -e ‘/^\s+$/d’ /path/file –删除空白行 以及
含有空格的空白行

# sed -r ‘/^(\s+)?$/d’ /path/file –同上

# sed -r ‘/^(\s+)?$/d’ /path/file –同上

# sed -r ‘/xxxxxx/d’ –删除包括钦定关键字的行

# sed -r ‘/xxxxxx/d’ –删除包涵指定关键字的行

 

 

三、awk
–文本分析工具

叁、awk
–文本分析工具

-F –字段分割符,能够是二个字符,也能够是多个字符。暗中认可的分割符为单个或接二连三的空格

-F –字段分割符,能够是三个字符,也得以是五个字符。暗许的分割符为单个或延续的空格

$NF –最终叁个列,NF 是number of
田野s:有字段的总和

$NF –最终一个列,NF 是number of
田野(field)s:有字段的总和

$0 –整条记下

$0 –整条记下

# awk -F ‘[ :]’ ‘{print $3,$四}’ /etc/passwd –以 【空格符】 or 【:】
为分隔符

# awk -F ‘[ :]’ ‘{print $三,$4}’ /etc/passwd –以 【空格符】 or 【:】
为分隔符

# head /etc/passwd | awk -F: ‘{print $1,$2}’ | column -t

# head /etc/passwd | awk -F: ‘{print $1,$2}’ | column -t

# echo ‘hello world, good morning’ | awk -F, ‘{print $1}’

# echo ‘hello world, good morning’ | awk -F, ‘{print $1}’

# head -n五 /etc/passwd | awk -F: ‘{print $NF}’
–拿文件各行的末段1列,不管文件几行内容列数是还是不是相同

# head -n伍 /etc/passwd | awk -F: ‘{print $NF}’
–拿文件各行的最终一列,不管文件几行内容列数是不是同样

3.1、FS

3.1、FS

Field separator:字段分割符。字段分割符除了足以经过命令行选项 -F
来内定外,还是能够在awk 里面钦定

Field separator:字段分割符。字段分割符除了足以经过命令行选项 -F
来钦点外,仍是能够在awk 里面内定

BEGIN:后边的代码会在拍卖第三行数据以前先进行,能够在此间做1些最初的设定,比如设定分割符FS

BEGIN:后边的代码会在处理第二行数据从前先进行,能够在此间做一些早先时代的设定,比如设定分割符FS

# head -n5 /etc/passwd | awk ‘BEGIN{FS=”:”} {print $1}’

# head -n5 /etc/passwd | awk ‘BEGIN{FS=”:”} {print $1}’

# head -n5 /etc/passwd | awk -F: ‘{print $1}’

# head -n5 /etc/passwd | awk -F: ‘{print $1}’

3.2、NR

3.2、NR

number of records:到近期行结束,总共处理的行数

number of records:到当前行停止,总共处理的行数

# head /etc/passwd | awk ‘{printf(“%05d:: george–%s\n”,N奇骏,$0)}’
–NLX570总计总共处理的行数,通过%0伍d的格式输出

# head /etc/passwd | awk ‘{printf(“%05d:: george–%s\n”,N中华V,$0)}’
–N汉兰达总括总共处理的行数,通过%0伍d的格式输出

# awk ‘END{print NKuga}’ /etc/passwd –直接用来总结总行数

# awk ‘END{print N奔驰M级}’ /etc/passwd –直接用来总括总行数

# awk -F: ‘{if (N帕杰罗==一){print $一}}’ /etc/passwd   –只处理第一行

# awk -F: ‘{if (N智跑==一){print $壹}}’ /etc/passwd   –只处理第三行

# awk -F “:” ‘N奥迪Q7==贰{print $一}’ /etc/passwd  –输出文件第3行的率先列

# awk -F “:” ‘NPRADO==2{print $一}’ /etc/passwd  –输出文件第壹行的第三列

# awk -F “:” “NR==2{print \$1}” /etc/passwd  –输出文件第二行的第一列

# awk -F “:” “NR==2{print \$一}” /etc/passwd  –输出文件第3行的率先列

3.3、FNR

3.3、FNR

# ls -l /etc/ | sed 1d | awk ‘BEGIN{print “start to process “} {total =
total + $伍} END{print N逍客 ” line Finished,resrlt: ” total ” kb”}’
–初略计算 /etc 下的文件大小

# ls -l /etc/ | sed 壹d | awk ‘BEGIN{print “start to process “} {total =
total + $5} END{print NCRUISER ” line Finished,resrlt: ” total ” kb”}’
–初略总结 /etc 下的文件大小

三.四、结合正则

三.四、结合正则

# ls -l | sed 1d | awk ‘{print $5,$0}’ | sort -k1,1h | sed -r ‘s/^[^
]+\s*//’ –将当前目录的文本按文件大小排列。[^ ]+表示四个非空,\s
代表空格符

# ls -l | sed 1d | awk ‘{print $5,$0}’ | sort -k1,1h | sed -r ‘s/^[^
]+\s*//’ –将当前目录的公文按文件大小排列。[^ ]+表示几个非空,\s
代表空格符

3.5、实例

3.5、实例

# awk ‘{print $一}’ access.log |sort|uniq -c|sort -nr|head -拾 –分析access.log获得访问前十个人的ip地址

# awk ‘{print $一}’ access.log |sort|uniq -c|sort -nr|head -10 –分析access.log得到访问前12个人的ip地址

 

 

二、regular_expression

二、regular_expression

1、正则表明式

一、正则表明式

正则表达式是对字符串操作的一种逻辑公式;正是用事先定义好的有个别一定字符、及这一个特定字符的3结合,组成一个“规则字符串”,

正则表达式是对字符串操作的一种逻辑公式;正是用事先定义好的壹些一定字符、及那个特定字符的咬合,组成3个“规则字符串”,

那几个“规则字符串”用来抒发对字符串的一种过滤逻辑;规定部分相当语法表示字符类、数量限定符和岗位关系,然后用那几个特种语法和普

以此“规则字符串”用来公布对字符串的一种过滤逻辑;规定部分出奇语法表示字符类、数量限定符和地点关系,然后用那几个新鲜语法和普

通字符壹起表示多个格局,那便是正则表达式(Regular Expression)

通字符一起表示二个方式,那就是正则表明式(Regular Expression)

2、特点

2、特点

贰.壹、灵活性、逻辑性和作用性卓殊的强;

二.一、灵活性、逻辑性和效用性非凡的强;

二.二、能够高速地用极不难的章程完结字符串的繁杂控制。

2.二、能够长足地用极简单的方式实现字符串的复杂性控制。

二.三、对Yu Gang接触的人来说,相比生硬难懂

2.三、对于刚先生接触的人来说,相比生硬难懂

3、单字符表示法

三、单字符表示法

. –相配任意字符

. –相称任意字符

\d –相称叁个数字字符。等价于
[0-9]

\d –相称1个数字字符。等价于
[0-9]

\D –相配1个非数字字符。等价于
[^0-9]

\D –匹配三个非数字字符。等价于
[^0-9]

\f –相称2个换页符。等价于 \x0c 和
\cL

\f –相配三个换页符。等价于 \x0c 和
\cL

\n –相称3个换行符。等价于 \x0a 和
\cJ

\n –相称四个换行符。等价于 \x0a 和
\cJ

\r –相配三个回车符。等价于 \x0d 和
\cM

\r –相配一个回车符。等价于 \x0d 和
\cM

\s
–相配任何空白字符,包括空格、制表符、换页符等等。等价于 [
\f\n\r\t\v]

\s
–相配任何空白字符,包涵空格、制表符、换页符等等。等价于 [
\f\n\r\t\v]

\S –相配任何非空白字符。等价于 [^
\f\n\r\t\v]

\S –相称任何非空白字符。等价于 [^
\f\n\r\t\v]

\t –相配八个制表符。等价于 \x09 和
\cI

\t –相配多少个制表符。等价于 \x09 和
\cI

\v –相配3个垂直制表符。等价于 \x0b
和 \cK

\v –相配叁个垂直制表符。等价于 \x0b
和 \cK

\w
–相配包蕴下划线的任何单词字符。等价于'[A-Za-z0-9_]’

\w
–相配包涵下划线的别的单词字符。等价于'[A-Za-z0-9_]’

 

 

四、边界表示法

肆、边界表示法

^ –字符串的开首

^ –字符串的初步

$ –字符串的尾声

$ –字符串的最终

\b –单词边界

\b –单词边界

\B –非单词边界

\B –非单词边界

\< –单词左侧界

\< –单词左侧界

\> –单词左边界

\> –单词左边界

伍、分组表示法

伍、分组表示法

(abc) –一组延续的字符abc

(abc) –一组几次三番的字符abc

(aa|bb) –一组一连的字符ab 或许bb

(aa|bb) –壹组接二连三的字符ab 可能bb

6、字符集合

陆、字符集合

[xyz]
–字符集合。相配所包罗的人身自由一个字符

[xyz]
–字符集合。相称所包蕴的任意2个字符

[^xyz]
–负值字符集合。相配未包涵的任性字符

[^xyz]
–负值字符集合。相称未包罗的轻易字符

[a-z]
–字符范围。相配钦赐范围内的人身自由字符

[a-z]
–字符范围。相称内定范围内的随机字符

[^a-z]
–负值字符范围。匹配任何不在钦定范围内的随意字符

[^a-z]
–负值字符范围。相称任何不在钦赐范围内的轻易字符

七、数量表示法

7、数量表示法

–用来代表前边的一个字符,大概①组字符重复的次数

–用来表示前边的3个字符,只怕壹组字符重复的次数

* –任意次, c >= 0

* –任意次, c >= 0

  • –至少1次, c >= 1
  • –至少1次, c >= 1

? –0次或者1次, c == 0 || c == 1

? –0次或者1次, c == 0 || c == 1

{m} –m 次, c == m

{m} –m 次, c == m

{m,} –至少m 次, c >= m

{m,} –至少m 次, c >= m

{m,n} –m次 至 n次, c >= m && c <=
n

{m,n} –m次 至 n次, c >= m && c <=
n

留意:私下认可情形下,数量表示符只功效于前方三个字符,若须求功力于前方几个字符,能够选用(…)把前面须要合作的七个字符括起来

只顾:暗中认可意况下,数量表示符只功用于前方三个字符,若必要功力于前方三个字符,能够应用(…)把前边需求协作的多少个字符括起来

 

 

8、特殊字符表示法

八、特殊字符表示法

^ $ . * + ? | \ { } [ ] ( )
都有特别含义的,假使必要代表那么些标记,则能够用反斜杠对它们进行转义

^ $ . * + ? | \ { } [ ] ( )
都有新鲜意义的,假诺急需代表那些标记,则足以用反斜杠对它们举办转义

玖、引用表示法

玖、引用表示法

从左侧开首数左手小括号,数字从一开首,被第三对括号相称的字符能够用\一来引用,第1对可以用\二 来引用,以此类推

从右侧初阶数左边小括号,数字从一先河,被第3对括号相称的字符能够用\一来引用,第三对能够用\二 来引用,以此类推

# echo abcabcabcaabb | grep -E ‘(a(bc)){2}\1’ –color

# echo abcabcabcaabb | grep -E ‘(a(bc)){2}\1’ –color

# echo abcabcabcaabb | grep -E ‘(a(bc)){2}a\2’ –color

# echo abcabcabcaabb | grep -E ‘(a(bc)){2}a\2’ –color

# echo “hello world, hello world, hello beautiful world” | grep -E
–color ‘((hello) (world)), \1, \2 .* \3’

# echo “hello world, hello world, hello beautiful world” | grep -E
–color ‘((hello) (world)), \1, \2 .* \3’

10、别的代表方法

10、别的代表方法

# date

# date

# date | grep –color -oE
‘([0-1][0-9]|2[0-3])(:[0-5][0-9]){2}’ –时间代表

# date | grep –color -oE
‘([0-1][0-9]|2[0-3])(:[0-5][0-9]){二}’ –时间代表

# echo 2014-07-07 12:30:30 | grep –color -E
‘[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])’
–日期表示

# echo 2014-07-07 12:30:30 | grep –color -E
‘[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])’
–日期表示

# ifconfig | grep –color -E
‘(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])’
–IP地址表示

# ifconfig | grep –color -E
‘(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])’
–IP地址表示

# ifconfig | grep –color -E ‘([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}’
–MAC表示

# ifconfig | grep –color -E ‘([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}’
–MAC表示

 

 

三、测试

三、测试

1、获取eth0的IP地址

1、获取eth0的IP地址

# ifconfig eth0 | grep ‘inet addr’ | awk -F: ‘{print $2}’ | awk ‘{print
$1}’

# ifconfig eth0 | grep ‘inet addr’ | awk -F: ‘{print $2}’ | awk ‘{print
$1}’

# ifconfig eth0 | grep ‘inet addr’ | sed ‘s/.*addr://;s/ .*//’

# ifconfig eth0 | grep ‘inet addr’ | sed ‘s/.*addr://;s/ .*//’

二、查看root 用户的报到shell

贰、查看root 用户的登录shell

# grep ^root /etc/passwd | awk -F: ‘{print $NF}’

# grep ^root /etc/passwd | awk -F: ‘{print $NF}’

三、查看/etc/passwd中有稍许种登录shell

三、查看/etc/passwd中有些许种登录shell

# awk -F: ‘{print $NF}’ /etc/passwd | sort -u | wc -l

# awk -F: ‘{print $NF}’ /etc/passwd | sort -u | wc -l

# sed ‘s/.*://’ /etc/passwd | sort -u | wc -l

# sed ‘s/.*://’ /etc/passwd | sort -u | wc -l

四、计算三个文件的总行数/总大小

四、总计多个文件的总行数/总大小

# cat * | wc -l

# cat * | wc -l

# cat * | wc -c

# cat * | wc -c

5、总计字符串的长短

伍、总括字符串的尺寸

# echo 1二叁 | wc -c — 多出的贰个是换行符

# echo 12三 | wc -c — 多出的贰个是换行符

# echo -n 1贰叁 | wc -c — 禁止出口换行符

# echo -n 1二三 | wc -c — 禁止出口换行符

陆、在文书首先行从前和终极一行之后输出1些字符

陆、在文书首先行从前和尾声一行之后输出1些字符

# cat /etc/hosts | sed -e ‘1i
***********************’ -e ‘$a
***********************’

# cat /etc/hosts | sed -e ‘1i
***********************’ -e ‘$a
***********************’

# cat /etc/hosts | awk ‘BEGIN{print “xxxxxxx”} {print $0} END{print
“xxxxxxx”}’

# cat /etc/hosts | awk ‘BEGIN{print “xxxxxxx”} {print $0} END{print
“xxxxxxx”}’

柒、输出系统开放的装有端口号

7、输出系统开放的保有端口号

# netstat -tulpn | awk ‘{print $4}’ | awk -F: ‘{print $NF}’ | grep
[0-9] | sort -nu

# netstat -tulpn | awk ‘{print $4}’ | awk -F: ‘{print $NF}’ | grep
[0-9] | sort -nu

八、计算在线用户

八、总计在线用户

# who | wc -l

# who | wc -l

九、历史开关机记录

玖、历史开关机记录

# last -x | grep -E ‘reboot|shutdown’

# last -x | grep -E ‘reboot|shutdown’

拾、查根文件系统的可用空间

拾、查根文件系统的可用空间

# df -h | grep ” /$” | awk ‘{print $(NF-2)}’

# df -h | grep ” /$” | awk ‘{print $(NF-2)}’

1一、查看sshd 登录记录,输出时间,用户名,客户端IP

1一、查看sshd 登录记录,输出时间,用户名,客户端IP

# grep -E ‘sshd.*Accepted pub’ /var/log/secure-20170528 | awk ‘{print
$1,$2,$3,$9,$11}’

# grep -E ‘sshd.*Accepted pub’ /var/log/secure-20170528 | awk ‘{print
$1,$2,$3,$9,$11}’

1二、系统至开机总运维时刻

1二、系统至开机总运转时刻

# uptime | awk -F, ‘{print $1,$2}’ | sed ‘s/.*up //’ | tr -s ” “

# uptime | awk -F, ‘{print $1,$2}’ | sed ‘s/.*up //’ | tr -s ” “

壹三、将10进制 IP 地址转换为2进制的 IP 地址

一叁、将十进制 IP 地址转换为二进制的 IP 地址

# echo 192.168.3.33 | sed -e ‘s/\./;/g’ -e ‘s/^/obase=2;ibase=10;/’ |
bc | xargs printf “%08d.” | sed ‘s/.$/\n/’

# echo 192.168.3.33 | sed -e ‘s/\./;/g’ -e ‘s/^/obase=2;ibase=10;/’ |
bc | xargs printf “%08d.” | sed ‘s/.$/\n/’

# echo “obase=2;ibase=10;192;168;3;33” | bc | xargs printf “%08d.” |
sed ‘s/.$/\n/’

# echo “obase=2;ibase=10;192;168;3;33” | bc | xargs printf “%08d.” |
sed ‘s/.$/\n/’

1肆、删除行首四个字符

14、删除行首四个字符

# sed ‘s/^..//’

# sed ‘s/^..//’

# tail -c +3

# tail -c +3

15、删除行尾五个字符

一伍、删除行尾多个字符

# sed ‘s/..$//’

# sed ‘s/..$//’

# head -c -2

# head -c -2

1陆、把字符串中的大写A替换到小写A

16、把字符串中的大写A替换到小写A

# sed ‘s/A/a/g’

# sed ‘s/A/a/g’

# tr A a

# tr A a

一七、判断字符串是不是以 A 起头

17、判断字符串是或不是以 A 初阶

if grep -Eq ‘^A’; then

if grep -Eq ‘^A’; then

if [ “$(echo $str | sed ‘s/^A//’)” != “$str” ];then

if [ “$(echo $str | sed ‘s/^A//’)” != “$str” ];then

if [ “${str#A}” != “$str” ]; then

if [ “${str#A}” != “$str” ]; then

1八、判断字符串是还是不是以 A 结尾

1捌、判断字符串是或不是以 A 结尾

if grep -Eq ‘A$’; then

if grep -Eq ‘A$’; then

if [ “$(echo $str | sed ‘s/A$//’)” != “$str” ];then

if [ “$(echo $str | sed ‘s/A$//’)” != “$str” ];then

if [ “${str%A}” != “$str” ]; then

if [ “${str%A}” != “$str” ]; then

1玖、截取字符串后面多个字符

1玖、截取字符串前面七个字符

# head -c 2

# head -c 2

# grep -oE ‘^..’

# grep -oE ‘^..’

# cut -c 1-2

# cut -c 1-2

# sed -r ‘s/^(..).*$/\1/’

# sed -r ‘s/^(..).*$/\1/’

20、截取字符串后边多个字符

20、截取字符串前边三个字符

# grep -oE ‘..$’

# grep -oE ‘..$’

# tail -c 2

# tail -c 2

# sed -r ‘s/^.*(..)$/\1/’

# sed -r ‘s/^.*(..)$/\1/’

二1、截取字符串中第1至第5个字符

贰一、截取字符串中第叁至第5个字符

# cut -c 3-5

# cut -c 3-5

# sed -r ‘s/^..(…).*$/\1/’

# sed -r ‘s/^..(…).*$/\1/’

# head -c5 | tail -c3

# head -c5 | tail -c3

2贰、截取字符串中第3,第一,第八至第玖,第三二至最终的字符

2二、截取字符串中第3,第2,第八至第七,第一2至最终的字符

# cut -c1,3,8-10,12-

# cut -c1,3,8-10,12-

# awk ‘BEGIN{FS=””} { for(i=1;i<=NF;i++) {if (i==1 || i== 3 ||
(i>=8 && i<=10) || i>=12) print $i } }’ | tr -d $’\n’

# awk ‘BEGIN{FS=””} { for(i=1;i<=NF;i++) {if (i==1 || i== 3 ||
(i>=8 && i<=10) || i>=12) print $i } }’ | tr -d $’\n’

二3、去除数据中的重复行

二三、去除数据中的重复行

# sort -u

# sort -u

# sort | uniq

# sort | uniq

二四、总计数据中同样的行现身的次数

二四、总括数据中1致的行出现的次数

# sort | uniq -c

# sort | uniq -c

2五、进行大文件的切割,每种小文件为100M

二伍、举办大文件的切割,各个小文件为100M

# head -c 2G /dev/urandom > bigfile

# head -c 2G /dev/urandom > bigfile

# split -b104857600 bigfile bigfile_

# split -b104857600 bigfile bigfile_

26、查找文件中单词 bin 出现的次数

26、查找文件中单词 bin 出现的次数

# grep -wo bin /etc/passwd | wc -l

# grep -wo bin /etc/passwd | wc -l

二7、删除文件空白行

2⑦、删除文件空白行

# grep -vE ‘^$’ /etc/ssh/sshd_config –不能去除有空格符的空白行

# grep -vE ‘^$’ /etc/ssh/sshd_config –无法去除有空格符的空白行

# grep -vE ‘^\s*$’ /etc/ssh/sshd_config –能够去除有空格符的空白行

# grep -vE ‘^\s*$’ /etc/ssh/sshd_config –能够去除有空格符的空白行

2八、把/etc/passwd 中所有的/bin/bash 登录shell 替换来 /sbin/nologin

2捌、把/etc/passwd 中全部的/bin/bash 登录shell 替换到 /sbin/nologin

# sed -E ‘s#/bin/bash#/sbin/nologin#g’ /etc/passwd

# sed -E ‘s#/bin/bash#/sbin/nologin#g’ /etc/passwd

2玖、总计文件 /etc/passwd 各类单词出现的频率

2玖、总计文件 /etc/passwd 种种单词出现的效能

# grep -oE ‘\w+’ /etc/passwd | sort | uniq -c | sed -r ‘s/^ +//’

# grep -oE ‘\w+’ /etc/passwd | sort | uniq -c | sed -r ‘s/^ +//’

# cat /etc/passwd | sed ‘s/[澳门金沙国际,:/ ]/\n/g’ | sed ‘/^$/d’ | sort | uniq
-c | sed -E ‘s/^\s+//’ | sort -k1,1n

# cat /etc/passwd | sed ‘s/[:/ ]/\n/g’ | sed ‘/^$/d’ | sort | uniq
-c | sed -E ‘s/^\s+//’ | sort -k1,1n

# cat /etc/passwd | grep -Eo ‘\w+’ | sort | uniq -c | sed -E
‘s/^\s+//’ | sort -k1,1n

# cat /etc/passwd | grep -Eo ‘\w+’ | sort | uniq -c | sed -E
‘s/^\s+//’ | sort -k1,1n

# cat /etc/passwd | sed ‘s/[:/ ]/\n/g’ | sed ‘/^$/d’ | sort | uniq
-c | sort -t” ” -k6,6n

# cat /etc/passwd | sed ‘s/[:/ ]/\n/g’ | sed ‘/^$/d’ | sort | uniq
-c | sort -t” ” -k6,6n

30、字符串检验

30、字符串检查测试

# echo abcd | grep -oE ‘^[a-z]+$’ –测试字符串是不是纯小写

# echo abcd | grep -oE ‘^[a-z]+$’ –测试字符串是还是不是纯小写

# echo 12344323 |grep -oE ‘^[0-9]+$’ –测试字符串是或不是纯数字

# echo 12344323 |grep -oE ‘^[0-9]+$’ –测试字符串是不是纯数字

# echo iiiIIII | grep -oE ‘^[a-zA-Z]+$’ –测试字符串是还是不是纯字母

# echo iiiIIII | grep -oE ‘^[a-zA-Z]+$’ –测试字符串是不是纯字母

# echo 3425 |grep -E ‘^(0|[1-9][0-9]*)$’ –测试字符串是或不是非负整数

# echo 3425 |grep -E ‘^(0|[1-9][0-9]*)$’ –测试字符串是不是非负整数

# echo 3 |grep -E ‘^[1-9][0-9]*$’ –测试字符串是还是不是正整数

# echo 3 |grep -E ‘^[1-9][0-9]*$’ –测试字符串是或不是正整数

# echo -23 |grep -E ‘^-[1-9][0-9]*$’ –测试字符串是不是负整数

# echo -23 |grep -E ‘^-[1-9][0-9]*$’ –测试字符串是还是不是负整数

# echo 0 | grep -E ‘^(-[1-9][0-9]*)|(0|[1-9][0-9]*)$’
–测试字符串是或不是整数

# echo 0 | grep -E ‘^(-[1-9][0-9]*)|(0|[1-9][0-9]*)$’
–测试字符串是或不是整数

# echo -0.30000 | grep -E
‘^(-[1-9][0-9]*|[+-]?0|[1-9][0-9]*)\.[0-9]+$’
–测试字符串是不是小数

# echo -0.30000 | grep -E
‘^(-[1-9][0-9]*|[+-]?0|[1-9][0-9]*)\.[0-9]+$’
–测试字符串是还是不是小数

# echo _9kdj_324kdsd_dk | grep ‘^[a-zA-Z_][a-zA-Z0-9_]*$’
–测试字符串是还是不是只含有字母、数字、下划线,而且不以数字初阶

# echo _9kdj_324kdsd_dk | grep ‘^[a-zA-Z_][a-zA-Z0-9_]*$’
–测试字符串是还是不是只含有字母、数字、下划线,而且不以数字起始

 

 

相关文章