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
$