linux grep用法小白梳理(2)

来源:互联网 发布:最好的网络推广公司 编辑:程序博客网 时间:2024/05/22 11:58

linux grep用法小白梳理

1.打印模式匹配所位于的字符或字节偏移:
echo gnu is not unix | grep -b -o “not”
7:not #一行中字符串的字符偏移是从该行的第一个字,符开始计算,起始值是0。在上面的例子中,”not”的偏移值是7(也就是说,not是从该行的第7个字符开始的,即“gnu is not unix”这一行)。
选项-b总是和-o配合使用。

2.搜索多个文件并找出匹配文本位于哪一个文件中:
grep -l linux sample1.txt sample2.txt sample3.txt sample4.txt
sample1.txt
sample2.txt
和-l相反的选项是-L,它会返回一个不匹配的文件列表。

3.递归搜索文件
grep “text” . -R -n #命令中的“.”指定了当前目录。grep的选项-R和-r功能一样。

4.忽略样式中的大小写选项-i
echo hello world | grep -i “HELLO”
hello
5.匹配多个样式
在进行匹配的时候通常只指定一个样式。然而,我们可以用选项-e来指定多个匹配样式:
grep -e “pattern1” -e “pattern”
例如:echo this is a line of text | grep -e “this” -e “line” -o
this
line
还有另一种方法也可以指定多个样式。我们可以提供一个样式文件用于读取样式。在样式文件中逐行写下需要匹配的样式,然后用选项-f执行
grep:grep -f pattern_filesource_filename例如:
cat pat_file
hello
cool 
echo hello this is cool | grep -f pat_file
hello
this is cool

6.在grep搜索中指定或排除文件
grep可以在搜索过程中指定(include)或排除(exclude)某些文件。我们通过通配符来指定所include文件或exclude文件。
grep “main()” . -r –include *.{c,cpp}
注意,some{string1,string2,string3}会扩展成somestring1 somestring2 somestring3。
grep “main()” . -r –exclude “README”
如果需要排除目录,可以使用–exclude-dir选项。如果需要从文件中读取所需排除的文件列表,使用–exclude-from FILE。

7.使用0值字节作为后缀的grep与xargs
xargs命令通常用于将文件名列表作为命令行
xargs命令通常用于将文件名列表作为命令行参数提供给其他命令。当文件名用作命令行参数时,建议用0值字节作为文件名终止符,而非空格。因为一些文件名中会包含空格字符,一旦它被误解为终结符,那么单个文件名就会被认为是两个文件名(例如,New file.txt被解析成New和file.txt两个文件名)。这个问题可以利用0值字节后缀来避免。我们使用xargs以便从诸如grep、find中接收stdin文本。这些命令可以将带有0值字节后缀的文本输出到stdout。为了指明输入的文件名是以0值字节(\0)作为终止符,需要在xargs中使用-0。
echo “test” > file1
echo “cool” > file2
echo “test” > file3
在下面的命令序列中,grep使用-Z选项输出以0值字节作为终结符的文件名(\0)。xargs -0读取输入并用0值字节终结符分隔文件名:
grep “test” file* -lZ | xargs -0 rm
8.打印出匹配文本之前或之后的行
基于上下文的打印是grep的特色之一。假设已经找到了给定文本的匹配行,通常情况下grep只会打印出这一行。但我们也许需要匹配行之前或之后的n行,也可能两者皆要。这可以在grep中用前后行控制选项来实现。来看看具体的做法。
要打印匹配某个结果之后的3行,使用-A选项:
seq 10 | grep 5 -A 3
5
6
7
要打印匹配某个结果之前的3行,使用-B选项:
seq 10 | grep 5 -B 3
2
3
4
5
要打印匹配某个结果之前以及之后的3行,使用-C选项:
seq 10 | grep 5 -C 3
2
3
4
5
6
7
8
如果有多个匹配,那么使用–作为各部分之间的定界符 :
echo -e “a\nb\nc\na\nb\nc” | grep a -A 1
ab

ab

1 0
原创粉丝点击