如何从标准输入读取?

del*_*ber 79 linux bash shell

我在尝试

grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
Run Code Online (Sandbox Code Playgroud)

并得到

unknown option to `s'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:

根据评论,代码实际上是正确的.我的完整代码类似于以下内容

grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
# my comment
Run Code Online (Sandbox Code Playgroud)

似乎由于某种原因,我的评论被作为输入提供给sed.很奇怪.

Ben*_*vis 103

使用--expression选项

grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g'
Run Code Online (Sandbox Code Playgroud)

  • 任何看起来像 `grep 'x' y | 的东西 sed 'z'` 可以重构为 `sed '/x/z' y`。另请参阅[无用的`grep`使用。](http://www.iki.fi/era/unix/award.html#grep) (3认同)

uml*_*ute 28

使用"-e"指定sed表达式

cat input.txt | sed -e 's/foo/bar/g'
Run Code Online (Sandbox Code Playgroud)

  • 我不确定我是否了解OP问题。`echo foo | sed的s / foo / bar / g'通过输出`bar`而无需-e起作用。所以我一定错过了他的问题。 (2认同)

小智 5

要从sedstdin而不是文件中进行捕获,您应该使用-e.

像这样:

curl -k -u admin:admin https://$HOSTNAME:9070/api/tm/3.8/status/$HOSTNAME/statistics/traffic_ips/trafc_ip/ | sed -e 's/["{}]//g' |sed -e 's/[]]//g' |sed -e 's/[\[]//g' |awk  'BEGIN{FS=":"} {print $4}'
Run Code Online (Sandbox Code Playgroud)