linux过滤脚本中的字段,Shell脚本中常用的文本过滤命令

在Linux运维日常工作中,Shell脚本的使用如家常便饭一样,须做到顺手拈来,文本处理所占比重更是不容小视,而文本处理中,稍具难度的莫过于文本的过滤。今天我们要通过这一讲,掌握文本过滤的常用命令,有哪些呢?具体如下:

1)head

作用:提取文本文件的前几行

格式:head  -数字  文本文件

实例:

--查看/etc/passwd/文件的前3行

#head  -3  /etc/passwd

2)tail

作用:提取文本文件的末尾几行

格式:tail +数字/-数字/-f   文本文件

实例:

--查看/etc/passwd文件中的最后5行

#tail  -5  /etc/passwd

--查看/etc/passwd文件的第10行到最后一行的内容

#tail  +10  /etc/passwd

--监视/vas/log/messages文件是否追加了内容

#tail  -f  /var/log/messages

3)grep

作用:在文本文件中提取匹配的行

格式:grep  [参数] "字符串/正则表达式"  文本文件

参数:

-c 只显示匹配的行的个数,不显示行的内容

-q 只显示查找状态,不显示行的内容

-v 查找不匹配的行

-n 在显示行前标上在文档中的行号

-w 完全匹配

-i 模式匹配时忽略大小写

正则表达式元字符:

^

锚定行的开始 如:'^grep'匹配所有以grep开头的行

$

锚定行的结束 如:'grep$'匹配所有以grep结尾的行

.

匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p

*

匹配零个或多个先前字符 如:' *grep'匹配所有一个或多个空格后紧跟grep的行。

.*一起用代表任意字符

[...]

匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep

[^...]

匹配一个不在指定范围内的字符

\(..\)

标记匹配字符,如'\(love\)',love被标记为1

\<

锚定单词的开始,如:'\

\>

锚定单词的结束,如:'grep\>'匹配包含以grep结尾的单词的行

x\{m\}

重复字符x,m次,如:'0\{5\}'匹配包含5个0的行

x\{m,\}

重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行

x\{m,n\}

重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5-10个o的行

实例:

--在/etc/passwd文件中查找包含字符串root的行并显示

#grep  "root"  /etc/passwd

--在/etc/passwd文件中查找以a/b/d开头的行并显示行内容

#grep  "^[abd]"  /etc/passwd

--统计/etc下以d开头的行数

#ls -l /etc | grep -c "^d"

4)sort

作用:对文本文件进行排序并输出

格式:sort [参数]  文件路径

-f 忽略大小写

-t 指定字段分隔符

-r      降序排列

-n      按数字大小排列

-u 消除重复行

实例:

--输出/etc/passwd文件内容并排序

#sort  /etc/passwd

--对/etc/passwd文件按第三字段排序,以:号字段分隔符,并以数字升序排列

--sort  -t: -n  +2 -3  /etc/passwd

5)uniq

作用:去除文本文件中重复内容并输出

格式:uniq  [参数]  文本路径

-u 输出未重复的内容

-d 输出重复的内容

实例:

--显示/abc/a1文件内容,去除重复,重复的行只显示一行

#uniq  /abc/a1

--显示/abc/a1的未重复内容,重复的行全都不显示

#uniq  -u  /abc/a1

--只显示/abc/a1的重复内容,重复的行只显示一行

#uniq -d  /abc/a1

注:经常结合sort与uniq

如:#sort  /abc/a1 | uniq

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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值