将Grep结果导入Sed—;仅根据grep的结果进行sed

将Grep结果导入Sed—;仅根据grep的结果进行sed,sed,grep,Sed,Grep,[苹果操作系统] 似乎sed需要一个输入文件,而我无法通过管道将grep传递给它。虽然sed可以像grep一样匹配,但如果它同时处理查找和替换,则会使sed操作非常复杂 例如,如果我想删除以“T”开头的每一行的第三个字,那么分离find/replace命令要比创建复杂的正则表达式方便得多 综观如此多的答案,似乎没有一个优雅的解决方案可以在不涉及新文件的情况下将grep传输到sed。我确实找到了这个,它几乎满足了我的要求: sed -i "s/$(grep 'old' input.txt)/new

[苹果操作系统]

似乎sed需要一个输入文件,而我无法通过管道将grep传递给它。虽然sed可以像grep一样匹配,但如果它同时处理查找和替换,则会使sed操作非常复杂

例如,如果我想删除以“T”开头的每一行的第三个字,那么分离find/replace命令要比创建复杂的正则表达式方便得多

综观如此多的答案,似乎没有一个优雅的解决方案可以在不涉及新文件的情况下将grep传输到sed。我确实找到了这个,它几乎满足了我的要求:

sed -i "s/$(grep 'old' input.txt)/new/g" input.txt
但它不能很好地处理多个匹配

我将概括如下:


有没有更好的方法来查找文本文件中的特定行并修改这些行?最好是cli,或尽可能低级别。

Sed是为了修改流而创建的(流编辑器),不需要输入文件。您是否尝试对流使用
-i
?它是特定于文件的,在操作流时没有任何意义。此外,macOS sed上的
-i
需要为创建的备份文件提供一个额外的参数,
-i''
用于无备份文件。添加一个小样本输入文件以及完整的预期输出将有助于更好地理解您的问题。。sed内置了过滤选项,因此您可能根本不需要grep。。。。。例如:
sed'/T/s/old/new/'ip.txt
@Sundeep-没有意识到它有一个过滤器选项。这满足了我的需要,谢谢!