shell 文本过滤命令[2]

时间 : 14-06-14 栏目 : Shell进阶 作者 : 老薛 评论 : 0 点击 : 1,707 次

(6)sed
作用:Sed(a stream editor)是一种流线型、非交互式编辑器。用可利用命令来编辑文件内容并输出
格式:sed [参数] '子命令' 文件路径
-n 关闭默认显示
-e 多次编辑
子命令:
-p 显示匹配的行
-a 在指定行的后面添加新行
-i 在指定行的前面添加新行
-d 删除匹配的行
-s 修改匹配的行
-r 将指定文件的内容读到当前文件匹配的行的下面
-w 将匹配的内容写到指定的文件中
-y 传送字符,变换字符
-n 读取下一行
-{...} 对匹配的行执行命令组
-q 退出sed
-b 标记 //跳到标记位置
-t 标记 //如果某行发生修改,则跳到指定位置
-T 标记 //如果某行未发生修改,则跳转到指定位置
实例:
-->打印命令:p
--显示/etc/passwd下包含root的行
#sed -n '/root/p' /etc/passwd
--显示/etc/passwd下2到15的行
#sed -n '2,15p' /etc/passwd
--显示/etc/passwd下2到末尾的行
#sed -n '2,$p' /etc/passwd

-->删除命令:d
--删除/etc/passwd下以u1开头的行,其余行输出到屏幕
#sed '/^u1/d' /etc/passwd
--删除/etc/passwd中的第9行,其余行输出到屏幕
#sed '9d' /etc/passwd
--删除/etc/passwd下含有u1的行,其余行输出到屏幕
#sed '/u1/d' /etc/passwd

-->修改命令:s
--将/etc/passwd中所有的root修改为admin,并输出
#sed 's/root/admin/g' /etc/passwd
--将/etc/passwd中第一行到第五行的root修改为admin,并输出
#sed '1,5s/root/admin/g' /etc/passwd

-->在指定行的后面添加新行:a
--在/etc/passwd中第3行下面插入一行"linux system"
#sed '3a \linux system' /etc/passwd

-->在指定行的前面添加新行:i
-在/etc/passwd中第3行前面插入一行"linux system"
#sed '3i \linux system' /etc/passwd

-->将指定文件的内容读到当前文件匹配的行的下面:r
--将/abc/a1的内容读到/abc/a2第5行的下面
#sed '5r /abc/a1' /abc/a2

-->将匹配的内容写到指定的文件中:w
--将/etc/passwd下包含root的行写到/abc/root.txt中
#sed -n '/root/w /abc/root.txt' /etc/passwd

-->传送字符,变换字符:y
--将/abc/a1第2行到第5行的a变为大写A
#sed '2,5y/a/A/' /abc/a1

-->退出:q
--在打印了5行之后,用q命令退出sed程序。
#sed '5q' /etc/passwd

-->综合应用:
--用sed处理ifconfig eth0命令的结果,只显示IP地址
#ifconfig eth0|sed -n '2p'|sed 's/^.*addr://g'|sed 's/B.*$//g'

(7)cut
作用:显示每行的第n到第m个字符
格式:cut [参数] 文件路
-d 指定字段分隔符
-c 以字符为单位
-f 以字段为单位
-s 去除不包含分隔符的行
实例:
--查看/etc/passwd每行的第一个字段,以:为分隔符
#cut -d: -f1 /etc/passwd
--用cut处理ifconfig eth0命令的结果,并输出IP地址
#ifconfig eth0|sed -n '2p'|cut -d: -f2|cut -d" " -f1

(8)tr
作用:替换或删除文件中的指定字符
格式:tr [参数] 字符串1 字符串2 文件路径
-c 替换字符
-d 删除字符
-s 替换字符串1 字符串2
字符范围:
[A-Z]
[a-z]
[0-9]
[0*n] //表示字符0重复出现指定次数n
如:[0*2]匹配00的字符串
\octal
控制字符:
\a 铃声
\b 退格符
\n 新行
\r 回车
\t tab键
通配字符:
[:alnum:] 所有字母和数字
[:alpha:] 所有字母
[:lower:] 所有小写字母
[:upper:] 所有大写字母
[:digit:] 所有数字
[:blank:] 所有空行
[:space:] 所有空格
[:graph:] 所有可显示的字符,不包含空格
[:print:] 所有可显示的字符,包括空格
[:cntrl:] 所有控制字符
[:punct:] 所有标点符号字符
[:xdigit:] 所有十六进制数字
实例:
--去除/abc/a1中的换行符
#tr -d '\n\r' < /abc/a1
--修改/abc/a1中所有abc为123
#tr 'abc' '123' < /abc/a1
--修改/abc/a1中所有小写字母为大写字母
#tr [:lower:] [:upper:] < /abc/a1

除非注明,文章均为( 老薛 )原创,转载请保留链接: http://www.bdkyr.com/shell/59.html

随便看看

0