首页 > 代码库 > LinuxShell脚本攻略--第四章 让文本飞
LinuxShell脚本攻略--第四章 让文本飞
grep
$ grep pattern filename #搜索filename下的包含pattern的行
$ grep "pattern" filename
$ grep -E "[a-z]+" filename #正则匹配添加参数-E或者下面的egrep
$ egrep "[a-z]+" filename
$ echo this is a line. | egrep -o "[a-z]+\." #只输出匹配的文本部分 -o
line.
$ grep -v match_pattern file #打印包含match_pattern行之外的所有行 -v(invert)
$ grep -c "text" filename #打印包含匹配字符串的行的数量
上面只是显示的匹配的行的数量并不是匹配的次数,想获取匹配项的数量,可以使用下面的技巧
$ echo -e "1 2 3 4\nhello\n5 6" | egrep -o "[0-9]" | wc -l 6
#打印包含匹配字符串的行号
$ cat sample1.txt gnu is not unix linux is fun bash is art
$ grep linux -n sample1.txt #-n打印匹配的行号
2:linux is fun
$ cat sample1.txt | grep linux -n
#打印模式匹配所位于的字符或字节偏移 $ echo gnu is not unix | grep -b -o "not" 7:not
-b 和-o 总是配合使用。
#搜索多个文件并找出匹配文本位于哪一个文件中 $ grep -l linux sample1.txt sample2.txt #-l找出匹配的文本列表 sample1.txt sample2.txt
和-l 相反的选项是-L ,它会返回一个不匹配的文件列表。
#递归搜索文件 $ grep -i "text" . -R -n #-R 递归搜索,-n打印行号,-i不考虑大小写
#用 grep 匹配多个样式
$ echo this is a line of text | grep -e "this" -e "line" -o #-e指定多个匹配样式
this
line
#在 grep 搜索中指定或排除文件
#目录中递归搜索所有的 .c和 .cpp文件
$ grep "main()" . -r --include *.{c,cpp} #--include查找符合规则的文件 *.{c,cpp}会扩展成 *.c *.cpp
#搜索中排除所有的 README 文件
$ grep "main()" . -r --exclude "README" #排除README文件,如果是文件夹--exclude-dir。如果是文件列表,使用 --exclude-from FILE 。
#使用0值字节作为后缀的 grep 与 xargs
#-Z输出以0值作为终结符的文件名(\0),xargs -0读取输入并用0值字节终结符分隔文件名.
$ grep "test" file* -lZ | xargs -0 rm #-Z 通常和 -l 结合使用
$ seq 10 | grep 5 -A #要打印匹配某个结果之后的3行,使用 -A 选项
$ seq 10 | grep 5 -B 3 #要打印匹配某个结果之前的3行,使用 -B 选项
$ seq 10 | grep 5 -C 3 #要打印匹配某个结果之前以及之后的3行,使用 -C 选项
sed
LinuxShell脚本攻略--第四章 让文本飞
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。