Grep 将stdin和管道连接到sed似乎不起作用

Grep 将stdin和管道连接到sed似乎不起作用,grep,replace,Grep,Replace,我正在尝试过滤和替换标准输入,以便只捕获针对我的风格调整的特定字符串。例如,假设标准输入字符串为 "KB: the system ran into a critical error" 然后我将grep这一行,将“KB:”更改为“####”,然后输出到STDOUT,以便 "### the system ran into a critical error" 我试过戴Fedora 12(实际上还有很多其他的) 从grep/sed的内部看到的区别是什么?为什么STDIN方法不起作用?我想知道为什么

我正在尝试过滤和替换标准输入,以便只捕获针对我的风格调整的特定字符串。例如,假设标准输入字符串为

"KB: the system ran into a critical error" 
然后我将grep这一行,将“KB:”更改为“####”,然后输出到STDOUT,以便

"### the system ran into a critical error"
我试过戴Fedora 12(实际上还有很多其他的)

grep/sed
的内部看到的区别是什么?为什么STDIN方法不起作用?我想知道为什么我的尝试会失败,而不是听说使用
xargs等替代方法。

这对我很有用:

echo“KB:系统遇到严重错误”| grep“KB:| sed-e's/KB:/###/g'

注意在
grep
命令中排除了
-
字符

在这里使用
grep
是没有用的。您可以将代码缩减为以下大小:

echo“KB:系统遇到严重错误”| sed-e的/KB:/####/g'

###系统遇到严重错误

$ grep "KB:" - | sed -e 's/KB:/###/g'
KB: the system ran into a critical error <--- This is what I typed in manually.
                                         <--- Nothing is printed
$ grep "KB:" text.txt | sed -e 's/KB:/###/g'
### the system ran into a critical error <--- Correctly displayed
$