我正在尝试过滤和替换标准输入,以便仅捕获调整到我的风格的特定字符串。例如,假设标准输入字符串是
"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方法不起作用的原因会有什么不同?而不是听说使用xargs
等替代方案,我想知道为什么我的尝试应该失败。
答案 0 :(得分: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