如何将 grep 命令的输出传递给 sed 命令?

10

我有一个类似这样的命令:

cat error | grep -o [0-9]

我想将只打印数字,例如230等的输出作为数字传递给sed

类似这样:

cat error | grep -o [0-9] | sed -n '$OutPutFromGrep,$OutPutFromGrepp'

这可行吗?

我是shell脚本的新手。先谢谢了。


为什么不试一下呢?请注意,单引号中的$变量不会被扩展。如果您想要扩展它们,请改用双引号。 - n. m.
我尝试了这个命令 echo cat error | grep -o [0-9] | sed -n "$1,$1",但是出现了错误:sed: -e expression #1, char 1: unknown command: ',' - batman
2
关于 cat error | grep -o [0-9]不要 Grep 猫 - Mehrwolf
你的 sed 命令出了问题,但我们看不到。$1 是一个 shell 参数。它的值是多少? - n. m.
3个回答

5

如果意图是打印grep返回的行,生成一个sed脚本可能是可行的方法:

grep -E -o '[0-9]+' error | sed 's/$/p/' | sed -f - error

3

您可能正在寻找xargs,尤其是-I选项:

themel@eristoteles:~$ xargs -I FOO echo once FOO, twice FOO
hi
once hi, twice hi
there
once there, twice there

您的示例:
themel@eristoteles:~$ cat error
error in line 123
error in line 234
errors in line 345 and 346
themel@eristoteles:~$ grep -o '[0-9]*' < error | xargs -I OutPutFromGrep echo sed -n 'OutPutFromGrep,OutPutFromGrepp'
sed -n 123,123p
sed -n 234,234p
sed -n 345,345p
sed -n 346,346p

对于实际使用,您可能需要传递一个输入文件给sed并删除echo

(顺便修复了您的UUOC。)


+1 很好。cat error | grep -o [0-9]+ 之后我有了数据,现在我该如何将它传递给 sed - batman

0

是的,您可以将grep的输出传递给sed。

请注意,为了匹配整数,您需要使用[0-9]*而不仅仅是[0-9],后者只会匹配一个数字。

还要注意,在sed参数中使用双引号以扩展变量,并且第二个变量名称似乎有一个拼写错误。

希望这可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接