Linux文本操作指令grep、sed和awk

最近还是沉迷Linux shell无法自拔,其中的文本指令如grep、sed和awk指令还是有丶东西的。故来总结归纳一番。

1.grep

首先是grep,其功能是在文件内查找指定的字符串,如果发现在文本中找到了指定的字符串,预设grep指令会把含有该字符串的那一行显示出来,且该字符串高亮。
grep语法:

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>]
[-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

参数貌似有点多,来个最简单的格式grep 字符串 文件

[root@localhost ~]# cat /etc/test.txt #测试文件内容
Hi,what's your name?
I'm very happy to meet you. 
How do you do?
I'm fine,thanks.
Would you like to drink sth?
Myname is Linux.
I wanna drink some coffee.
It's a nice day,isn't it?
Where are you from?
[root@localhost ~]# grep you /etc/test.txt 
Hi,what's your name?
I'm very happy to meet you. 
How do you do?
Would you like to drink sth?
Where are you from?
#将显示test.txt文件中所有含you的行,粘贴过来高亮貌似不能显示,见谅。

这时候我们试试加点参数,比如-r(recusion),递归查找,在etc/sysconfig目录下递归查找含有update字符串的文件行,此时不止输出含有update的行,还会输出该文件名。

[root@localhost sysconfig]# grep -r update /etc/sysconfig 
/etc/sysconfig/network-scripts/ifup-TeamPort:       /usr/bin/teamdctl ${TEAM_MASTER} port config update ${DEVICE} "${TEAM_PORT_CONFIG}" || exit 1
/etc/sysconfig/network-scripts/ifdown-post:update_DNS_entries
/etc/sysconfig/network-scripts/ifup-aliases:# addrs will be updated on existing aliases, and new aliases will be setup.
/etc/sysconfig/network-scripts/ifup-aliases:        # update ARP cache of neighboring computers:
/etc/sysconfig/network-scripts/ifup-eth:            # update ARP cache of neighboring computers
/etc/sysconfig/network-scripts/ifup-eth:            if ! is_false "${arpupdate[$idx]}" && [ "${REALDEVICE}" != "lo" ]; then
/etc/sysconfig/network-scripts/ifup-post:    update_DNS_entries

试试-v参数,反向查找,查找不含有you*的表达式,上篇文章刚刚介绍了正则表达式,此处表示查找不含有以you开头的字符串,在上述test.txt中显然会过滤到含有you和your的行。

[root@localhost /]# grep -v you* /etc/test.txt 
I'm fine,thanks.
Myname is Linux.
I wanna drink some coffee.
It's a nice day,isn't it?

2.sed

其次我们介绍sed指令,sed命令是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed语法:

sed [-hnV][-e
                    
                    

你可能感兴趣的:(Linux)