我有这样的命令:
cat error | grep -o [0-9]
仅打印2
,30
等数字。现在我希望将此号码传递给sed
。
类似的东西:
cat error | grep -o [0-9] | sed -n '$OutPutFromGrep,$OutPutFromGrepp'
是否可以这样做?
我是shell脚本的新手。提前致谢
答案 0 :(得分:4)
如果打算打印grep
返回的行,则可能需要生成sed
脚本:
grep -E -o '[0-9]+' error | sed 's/$/p/' | sed -f - error
答案 1 :(得分:2)
您可能正在寻找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。)
答案 2 :(得分:0)
是的,您可以将输出从grep传递给sed。
请注意,为了匹配整数,您需要使用[0-9] *,而不仅仅是[0-9],它只匹配一个数字。
另请注意,您应该使用双引号来扩展变量(在sed参数中),并且您的第二个变量名称中似乎有拼写错误。
希望这有帮助。