剖析命令,test命令和grep作业及Sed作业awk作业和巡回结构

By admin in 美高梅手机版4858 on 2019年4月10日

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

1、文本处理_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作业和巡回结构,009day–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:假诺相配成功,则只将文件名打字与印刷出来,退步则不打字与印刷,平日-rl一起用,grep
-rl ‘root’ /etc 

-A:借使合营成功,则将匹配行及今后n行一起打字与印刷出来

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

-C:假如相称成功,则将相配行及其前后n行壹起打字与印刷出来

-c:假若相称成功,则将合营到的行数打字与印刷出来

-E:等于egrep,扩展

-i:忽略大小写

-v:取反,不匹配

-w:相配单词

正则表达式及字符处理

对象文件/etc/passwd,使用grep命令或egrep

一.彰显出全部含有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

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

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

8.出示出/etc目录下全体包括root的文书名

egrep -rl “/root” /etc

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

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

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

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

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

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

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

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

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

四,删除文件每行的尾数首个字符。

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

伍,删除文件每行的第1个单词。

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

陆,删除文件每行的倒数第2个单词。

sed -r ‘s/([^a-Z]+)([a-Z]美高梅手机版4858,+)([^a-Z]+)([a-Z]+)$/\1\3\4/’
/etc/passwd

7,删除文件每行的最终三个单词。

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

八,交流每行的率先个字符和第一个字符。

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

玖,交换每行的率先个字符和第四个单词。

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

拾,交流每行的率先个单词和尾声3个单词。

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

11,删除贰个文本中兼有的数字。

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

1二,删除每行起初的有所空格。

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

一3,用制表符替换文件中冒出的拥有空格。

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

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

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

一伍,打字与印刷每行1回。

sed ‘p;p’ /etc/passwd

1陆,隔行删除。

sed ‘1~2d’ /etc/passwd

1七,把文件从第二行到第4行复制到第八行前面。(选做题)

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

1八,把公文从第3行到第6行移动到第10行后边。(选做题)

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

1玖,只突显每行的首先个单词。

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

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

sed -r
‘s/^([a-Z]+)([^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

打字与印刷第4-10行的行号和用户名

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

打字与印刷字段数超越五的行

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

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

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

if 结构

美高梅手机版4858 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语句

美高梅手机版4858 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循环

美高梅手机版4858 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循环

美高梅手机版4858 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’   

1、文本处理_2

一、文本处理_2

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

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

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

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     

-BMWX伍 –递归,用于搜索目录下的公文

-Murano –递归,用于搜索目录下的文书

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 -XC90l AUTOSWAP /etc/sysconfig/
–钦点目录里面,哪个文件包蕴了字符串AUTOSWAP

# grep -RAV四l AUTOSWAP /etc/sysconfig/
–指定目录里面,哪个文件蕴含了字符串AUTOSWAP

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

# grep -n bash /etc/passwd | awk -F:
‘{print $1}’ –找出内定文件中 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 -A二 mail /etc/passwd
–打字与印刷出钦命文件中蕴藏 mail 的行,同时打出其下部二行

# grep -A二 mail /etc/passwd
–打字与印刷出钦点文件中涵盖 mail 的行,同时打出其下部贰行

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

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

# grep -C贰 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 ‘^.{5}$’ —
使用扩充的正则表达式

# 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的空白行

 

 

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

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

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

剖析命令,test命令和grep作业及Sed作业awk作业和巡回结构。界定点名:不明显钦点的话,暗中同意是独具的行;能够是行号;或许正则表明式

动作内定:

动作钦赐:

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’ –删除第3 行至最终

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

# 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/’ –为钦赐范围,替换全数行第 1 个
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/ –替换每行第2个a

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

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

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

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

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

s/a/A/叁g –替换每第一个至最后2个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’
–作用同上,使用其它字符作为分隔符

二.3、输出钦点行

2.叁、输出钦命行

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

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

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

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

2.4、插入

2.4、插入

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

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

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

# 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 ‘3a good morning’
–也可应用延续符

# cat /etc/passwd | sed -e ‘4i 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 –删除钦赐文件第 6 个字符为
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/’
–删除从二个字符发轫的10个字符

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

# 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 –字段分割符,能够是2个字符,也能够是八个字符。暗中认可的分割符为单个或一而再的空格

$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 -n5 /etc/passwd | awk -F: ‘{print $NF}’
–拿文件各行的末梢1列,不管文件几行内容列数是或不是一律

# head -n5 /etc/passwd | awk -F: ‘{print $NF}’
–拿文件各行的末梢壹列,不管文件几行内容列数是还是不是壹律

3.1、FS

3.1、FS

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

Field separator:字段分割符。字段分割符除了可以通过命令行选项 -F
来钦赐外,还足以在awk 里面钦定

BEGIN:后边的代码会在拍卖第3行数据从前先实施,能够在此处做一些初期的设定,比如设定分割符FS

BEGIN:前边的代码会在拍卖第①行数据以前先实施,可以在那里做1些早期的设定,比如设定分割符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”,NRubicon,$0)}’
–NKoleos总括总共处理的行数,通过%0伍d的格式输出

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

# awk ‘END{print NTiggo}’ /etc/passwd –直接用来计量总行数

# awk ‘END{print N奥德赛}’ /etc/passwd –直接用来计量总行数

# awk -F: ‘{if (N奥迪Q三==1){print $1}}’ /etc/passwd   –只处理第叁行

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

# awk -F “:” ‘N福特Explorer==二{print $一}’ /etc/passwd  –输出文件第3行的首先列

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

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

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

3.3、FNR

3.3、FNR

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

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

叁.四、结合正则

三.4、结合正则

# 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拿到访问前10个人的ip地址

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

 

 

二、regular_expression

二、regular_expression

1、正则表明式

1、正则表明式

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

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

其一“规则字符串”用来表明对字符串的一种过滤逻辑;规定部分不相同日常语法表示字符类、数量限定符和职位关系,然后用那一个卓殊语法和普

那个“规则字符串”用来发挥对字符串的一种过滤逻辑;规定部分独特语法表示字符类、数量限定符和职责关系,然后用那么些特种语法和普

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

通字符一起表示四个格局,那正是正则表明式(Regular Expression)

2、特点

2、特点

2.一、灵活性、逻辑性和成效性13分的强;

2.一、灵活性、逻辑性和作用性卓殊的强;

贰.二、能够长足地用极简单的措施完毕字符串的复杂控制。

贰.贰、能够高速地用极简单的方法完成字符串的扑朔迷离控制。

2.三、对于刚(Yu-Gang)接触的人来说,比较生硬难懂

二.3、对于刚同志接触的人的话,比较生硬难懂

3、单字符表示法

三、单字符表示法

. –相称任意字符

. –相称任意字符

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

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

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

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

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

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

\n –相配三个换行符。等价于 \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 –相称1个制表符。等价于 \x09 和
\cI

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

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

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

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

 

 

四、边界表示法

4、边界表示法

^ –字符串的上马

^ –字符串的起首

$ –字符串的尾声

$ –字符串的最后

\b –单词边界

\b –单词边界

\B –非单词边界

\B –非单词边界

\< –单词左侧界

\< –单词左边界

\> –单词左边界

\> –单词左侧界

5、分组表示法

五、分组表示法

(abc) –一组接二连三的字符abc

(abc) –1组一连的字符abc

(aa|bb) –壹组三番五次的字符ab 只怕bb

(aa|bb) –1组再而三的字符ab 或许bb

陆、字符集合

陆、字符集合

[xyz]
–字符集合。相配所蕴藏的任意三个字符

[xyz]
–字符集合。相配所富含的随意一个字符

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

[^xyz]
–负值字符集合。相称未包涵的人身自由字符

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

[a-z]
–字符范围。相配钦点范围内的四意字符

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

[^a-z]
–负值字符范围。相配任何不在钦赐范围内的人身自由字符

7、数量表示法

7、数量表示法

–用来代表前面包车型客车三个字符,可能1组字符重复的次数

–用来代表前面包车型地铁1个字符,或许一组字符重复的次数

* –任意次, 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

留神:私下认可景况下,数量表示符只效用于前方2个字符,若要求功力于前方三个字符,能够选用(…)把前边必要十分的七个字符括起来

小心:暗中同意意况下,数量表示符只功用于前方1个字符,若需求功力于前方七个字符,能够行使(…)把前面必要相配的多少个字符括起来

 

 

八、特殊字符表示法

八、特殊字符表示法

^ $ . * + ? | \ { } [ ] ( )
都有异乎平日意义的,假若供给代表那么些标记,则足以用反斜杠对它们实行转义

^ $ . * + ? | \ { } [ ] ( )
都有非常意义的,如若急需代表这一个标记,则足以用反斜杠对它们进行转义

玖、引用表示法

9、引用表示法

从左边早先数左边小括号,数字从1从头,被第三对括号相配的字符能够用\一来引用,第3对能够用\2 来引用,以此类推

从左侧初始数左方小括号,数字从一起来,被第2对括号相称的字符能够用\一来引用,第二对能够用\2 来引用,以此类推

# 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、别的代表方法

拾、别的代表方法

# 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]){2}’ –时间代表

# 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/ .*//’

2、查看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

4、总结多少个文本的总行数/总大小

四、总括八个文本的总行数/总大小

# cat * | wc -l

# cat * | wc -l

# cat * | wc -c

# cat * | wc -c

伍、总计字符串的尺寸

伍、总括字符串的长度

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

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

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

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

陆、在文件首先行从前和最终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”}’

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

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

# 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’

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

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

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

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

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

11、查看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二、系统至开机总运维时刻

12、系统至开机总运维时刻

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

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

13、将十进制 IP 地址转换为2进制的 IP 地址

一3、将10进制 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四、删除行首多个字符

1四、删除行首多个字符

# sed ‘s/^..//’

# sed ‘s/^..//’

# tail -c +3

# tail -c +3

一伍、删除行尾多个字符

一5、删除行尾五个字符

# sed ‘s/..$//’

# sed ‘s/..$//’

# head -c -2

# head -c -2

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

1六、把字符串中的大写A替换来小写A

# sed ‘s/A/a/g’

# sed ‘s/A/a/g’

# tr A a

# tr A a

壹7、判断字符串是或不是以 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

18、判断字符串是还是不是以 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/’

2一、截取字符串中第2至第几个字符

2壹、截取字符串中第二至第三个字符

# 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二、截取字符串中第贰,第壹,第玖至第七,第2二至最后的字符

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

# 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’

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

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

# sort -u

# sort -u

# sort | uniq

# sort | uniq

二4、总括数据中相同的行出现的次数

二4、计算数据中壹样的行出现的次数

# sort | uniq -c

# sort | uniq -c

25、进行大文件的切割,每一个小文件为100M

2伍、举办大文件的切割,每种小文件为十0M

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

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

# split -b104857600 bigfile bigfile_

# split -b104857600 bigfile bigfile_

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

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

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

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

二七、删除文件空白行

二七、删除文件空白行

# 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_]*$’
–测试字符串是还是不是只包涵字母、数字、下划线,而且不以数字起头

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有