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]+\." #只输出匹配的文本部分 -oline.$ 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指定多个匹配样式thisline #在 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
时间: 2024-10-24 15:59:54