4

我正在尝试过滤和替换标准输入,以便仅捕获根据我的口味调整的特定字符串。例如,假设标准输入字符串是

"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,而是想知道为什么我的尝试会失败。

4

1 回答 1

5

这对我有用:

echo "KB: the system ran into a critical error" | grep "KB:" | sed -e 's/KB:/###/g'

注意命令中-字符的排除。grep

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

echo "KB: the system ran into a critical error" | sed -e 's/KB:/###/g'
### the system ran into a critical error

于 2012-05-14T11:01:08.343 回答