我试图从我在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 /匹配时退出(打印后).
标签:sed,substring,linux 来源: https://codeday.me/bug/20191121/2051929.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。