+-
仅从linux中的字符串中过滤出一个子字符串
我试图从我在 linux中使用sed命令的字符串中提取特定的子字符串.但是,问题在于,在命令第一次向我返回子字符串后,我再次在字符串中寻找开始关键字.

我想跳过最后一部分.我只想要关键字之间的第一个子字符串.

字符串:bhaskar.txt

bhaskar
rahul
gaurav
ganesh
bhaskar
rahul

需要子字符串:“ bhaskar”和“ ganesh”之间的所有内容

使用的命令:sed -n’/ bhaskar /,/ ganesh / p’bhaskar.txt

输出:

bhaskar
rahul
gaurav
ganesh
bhaskar
rahul

预期产量:

bhaskar
rahul
gaurav
ganesh
最佳答案
这是您可以在awk中执行的操作:

awk '/bhaskar/ && !p++, /ganesh/' bhaskar.txt

第一次/ bhaskar /匹配时,p尚未定义,因此!p为true且范围开始. p表示检查该值后,将p递增1.范围将一直持续到/ ganesh /匹配为止.

在第一个范围完成后,如果/ bhaskar /再次匹配,则p将为正,因此!p将计算为false,并且该范围将不会重新开始.

输出:

bhaskar
rahul
gaurav
ganesh

这是您可能会喜欢的另一种方式:

awk '/bhaskar/ {p=1} p {print} /ganesh/ {exit}' bhaskar.txt

可以说是更不言自明的,它会在/ bhaskar /匹配后立即设置变量p,在设置变量p时显示,在/ ganesh /匹配时退出(打印后).

点击查看更多相关文章

转载注明原文:仅从linux中的字符串中过滤出一个子字符串 - 乐贴网