linux grep用法小白梳理(2)

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值