+-

我试图从我在 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中的字符串中过滤出一个子字符串 - 乐贴网