如何用grep提取test_long_sentence.txt中含test1的引号闭合前内容?
解决方案
我刚好处理过类似的需求,用带有Perl正则支持的grep命令就能直接搞定,完全不需要修改原文件。试试这个命令:
grep -Po '^.*?test1.*?(?=")' test_long_sentence.txt
命令拆解说明:
-P:开启Perl兼容正则模式,这让我们能使用更灵活的匹配语法(比如正向预查)-o:只输出匹配到的部分,而不是整行内容,刚好符合你要提取特定片段的需求^.*?test1.*?(?="):这个正则的逻辑很直观:^:从行的开头开始匹配.*?test1:非贪婪匹配到第一个test1(避免跳过多个test1的情况).*?(?="):继续非贪婪匹配,直到遇到未被包含在结果里的双引号((?=")是正向预查,只判断引号存在但不把它包含到输出中)
如果你的文本里用的是单引号,只需要把正则里的"换成'就行:
grep -Po "^.*?test1.*?(?=')" test_long_sentence.txt
实际效果示例:
假设你的文本行是:
"User data: test1, order ID 123" | timestamp: 2024-05-20
运行第一个命令后,输出会是:
User data: test1, order ID 123
完美提取到引号闭合前的目标内容,还自动排除了引号后的无关数据~
内容的提问来源于stack exchange,提问作者Jojoleo
相关产品推荐
相关产品推荐

