我正在尝试过滤和替换标准输入,以便仅捕获根据我的口味调整的特定字符串。例如,假设标准输入字符串是
"KB: the system ran into a critical error"
然后我会grep这一行,把“KB:”改成“###”,然后输出到STDOUT这样
"### the system ran into a critical error"
我在 Fedora 12 中尝试过(实际上在许多其他版本中)
$ 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
我创建了一个文本文件 text.txt,其中包含相同的示例字符串,然后grep
从文件中读取,例如:
$ grep "KB:" text.txt | sed -e 's/KB:/###/g'
### the system ran into a critical error <--- Correctly displayed
$
从内部看出什么区别grep/sed
以及为什么 STDIN 方法不起作用?我不想听到诸如 using 之类的替代方案xargs
,而是想知道为什么我的尝试会失败。