如何组合grep参数匹配以query或>开头的行并将结果写入文件
问题根因
你使用的||是Shell逻辑或运算符,仅当前一条命令执行失败(返回非0状态码)时才会触发后一条命令执行,同时你写的> newfile.txt重定向规则仅作用于后一条grep指令,因此匹配结果直接输出到终端,无法生成预期的输出文件。
正确实现方案
方案1:单条grep指定多匹配规则(最推荐)
grep原生支持通过多个-e参数指定多个匹配规则,配合^正则锚定行首,精准匹配开头符合要求的行:
grep -e '^query=' -e '^>' filename.txt > newfile.txt
该方案仅扫描一次文件,大文件场景下效率最高。
方案2:正则或语法合并规则
通过扩展正则的|或语法合并两个匹配条件,需要加-E参数开启扩展正则支持:
grep -E '^query=|^>' filename.txt > newfile.txt
方案3:多命令结果统一重定向
如果需要拆分两条grep执行,需要把两条命令的执行结果打包后统一重定向:
{ grep '^query=' filename.txt; grep '^>' filename.txt; } > newfile.txt
该方案会扫描两次文件,效率低于前两种,仅适合特殊场景使用。
内容的提问来源于stack exchange,提问作者Jasmin Jonson
相关产品推荐
相关产品推荐

