Linux系统中: shell的文本处理( grep / sed / awk)

######1.grep文本过滤明令######

全面搜索研究正则表达式并显示出来

grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 ,打印匹配到的行。
由正则表达式或者字符及基本文本字符所编写的过滤条件。

###1.grep的格式###

grep   匹配条件  处理文件

###2.grep中字符的匹配位置设定###

^ 关键字             ##以 “关键字”开头
关键字 $            ##以 “关键字”结尾
\< 关键字           ##“关键字”前没有字符
关键字 \>           ##“关键字”后没有字符
\< 关键字 \>       ##“关键字”前后均没有字符

grep  -i    ##忽略大小写

###3.grep的正则表达式###

1)grep   r...   file         ##以r开头的任意3个字符的行
2)grep   r...t   file        ##以r开头、t结尾的,并且中间有任意3个字符的行
3)grep   ...t    file        ##以t结尾的,前面有3个字符的行

###4.grep 正则表达式与扩展正则表达式###

正规的 grep 不支持扩展的正则表达式,
竖线是用于表示“或”的扩展正则表达式字符,正规的 grep 无法识别
加上反斜杠,这个字符就被翻译成扩展正则表达式,就像 egrp和grep -E 一样

###5.grep 中字符的匹配次数设定###

.*                  ##关键字之间匹配任意字符
*                   ##字符出现 [0- 任意次 ]
\?                 ##字符出现 [0-1 次 ]
\+                 ##字符出现 [1- 任意次 ]
\{n\}              ##字符出现 [n 次 ]
|{m,n\}          ##字符出现 [ 最少出现 m 次,最多出现 n 次 ]
\{0,n\}           ##字符出现 [0-n 次 ]
\{m,\}            ##字符出现 [ 至少 m 次 ]
\(xy\)\{n\}xy   ##关键字出现 [n 次 ]

*     ##字符出现 [0- 任意次 ]

\+     ##字符出现 [1- 任意次 ]

\{n\}            ##字符出现 [n 次 ]
|{m,n\}          ##字符出现 [ 最少出现 m 次,最多出现 n 次 ]
\{0,n\}          ##字符出现 [0-n 次 ]
\{m,\}           ##字符出现 [ 至少 m 次 ]

\?     ##字符出现 [0-1 次 ]

######2.sed行编辑器######

用来操作纯 ASCII 码的文本
处理时,把当前处理的行存储在临时缓冲区中,称为“模式间” (patternspace),可以指定仅仅处理哪些行
sed 符合模式条件的处理,不符合条件的不予处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,直到文件末尾

调用sed 命令格式:
有两种形式:
sed  [options]   ' command '   file(s)
sed  [options]   -f   scriptfile   file(s)

###1.p 模式操作###

sed   -n    '/\:/p'  file              ##显示以:隔开的行,不复制
sed   -n    '/ xxx$ /p'  file
       ##显示以xxx结尾的行,不复制
sed   -n    '/ ^xxx /p'  file       ##显示以xxx开头的行,不复制
sed   -n    '2,6p'   file           ##显示第2行至第6行,不复制
sed   -n    '2,6!p'  file           ##显示除了第2行至第6行以外的行,不复制

sed -n '/\:/p'  xxx    ##显示以:隔开的行

sed -n /^#/p  xxx     ##显示以#开头的行

sed -n '/^#/!'p  xxx  ##显示除了以#开头的行

cat -b  xxx   ##跳过空行显示行号

cat -n  xxx   ##包括空行显示行号

cat -n  xxx | sed -n '6p'             ##显示第6行
cat -n  xxx | sed -n '2,6p'           ##显示第2行至第6行
cat -n  xxx | sed -n -e '2p' -e '6p'  ##显示第2行和第6行
cat -n  xxx | sed -n -e '2p;6p'       ##显示第2行和第6行

###2. d 模式操作###

sed   '/^xxx/d'  file           ##删除以xxx开头的行,并显示
sed    '/^xxx/!d'  file         ##删除除了以xxx开头的行之外的行,并显示
sed    '/xxx $/d'  file         ##删除以xxx结尾的行,并显示
sed    '1,4d'  file              ##删除第1行至第4行,并显示
sed    –n    '/^xxx/d'  file  ##删除以xxx开头的行,不显示

sed   '/^xxx/d'     ##删除以xxx开头的行,并显示
sed   '/^xxx/!d'    ##删除除了以xxx开头的行之外的行,并显示(只保留以xxx开头的行)
sed –n  '/^xxx/d'   ##删除以xxx开头的行,不显示

cat -n  xxx | sed '4d'             ##删除第4行,并查看
cat -n  xxx | sed '4,6d'           ##删除第4行至第6行,并查看
cat -n  xxx | sed  -e '4d;6d'      ##删除第4行和第6行,并查看

###3.a 模式操作###

sed  '/^xxx/a \hello westos'   file             ##添加hello westos到以xxx开头的行的下一行
sed  '/^xxx/a \hello \nwestos'   file      ##添加[hello换行westos]到以xxx开头的行的下一行

sed  'axxx'  ##添加xxx到每一行的下一行

###4. i 模式操作###

sed   '/^xxx/i\hello \nwestos'   file       ##插入[hello换行westos]到以xxx开头的行的上一行

###5. c 模式操作###

sed '/^xxx/c\hello \nwestos'   file        ##用[hello换行westos]替换以xxx开头的行

###6. w 模式操作###

sed  '/^xxx/w file1'   file             ##将以xxx开头的行导入到一个新文件中,并显示
sed  -n  '/^xxx/w  file1'  file          ##将以xxx开头的行导入到一个新文件中,不显示
            

###7. sed的其他用法###

sed   '*/xxx'   file        ##将xxx文件里的内容插入到每一行的下一行
sed   '6r*/xxx'   file    ##将xxx文件里的内容插入到第6行的下一行

sed    '/^xxx/='   file                                         ##显示以xxx开头的行的行号和所有内容
sed   -n  '/^xxx/='   file                                    ##显示以xxx开头的行的行号,不显示内容
sed   -n  -e  '/^xxx/p'  -e  '/^xxx/='   file          ##显示以xxx开头的行的行号和内容

sed   -nf   file2   file     ##执行file2文件中的条件,不复制原文件内容

sed   's/^xxx/***/g'   file                                   ##将文件中所有的xxx替换成***,并显示
sed   -e  's/xxx/***/g;s/###/+++/g'  file        ##将文件中所有的xxx替换成***和###替换成+++,并显示
sed   's/ \ / / # /'   file                                        ##将文件中的 / 替换成#,只替换第一个,并显示

sed  '4s/xxx/***/g'   file                           ##将第4行的xxx替换成***,并显示全文
sed  '2,4s/xxx/***/g'  file                         ##将第2行到第4行的xxx替换成***,并显示全文
sed  '/###/,/+++/s/xxx/***/g'  file            ##将以###开头的行至以+++开头的行中的xxx替换成***,并显示全文

sed   's/ \ / /  /g'  file               ##将文中的所有“ \ ”换为“ ”,并显示
sed   's@/@  @g'  file          ##@和 / 是一个意思,为了方便区分使用
sed   's@xxx@***@g'  file   ##将文中的所有xxx换为***,并显示

sed    'G'   file              ##将文件中的每一行都空一行
sed   '$!G'   file           ##除了最后一行后不空行外,其他的每一行都空一行
sed   -n  '$p'  file         ##显示最后一行

猜你喜欢

转载自blog.csdn.net/weixin_44234846/article/details/88037307