递归sed搜索两个字符串之间的文本。将文本和文件路径输出到屏幕

时间:2014-11-28 21:11:05

标签: bash shell unix sed

我有一个命令会在用户定义的字符串之间输出文本,但我似乎无法输出文本来自的文件名...

有没有办法调整当前命令来执行此操作?

find . -type f -print0 | xargs -0 sed -n '/'$1'/,/'$2'/p' $3 

命令语法:

./shell.sh Start End *.xml

理想的输出类似于:

  

文件名

     

$ 1到$ 2之间的文字

     

下一个文件名

     

$ 1到$ 2之间的文字

     

依旧......

1 个答案:

答案 0 :(得分:0)

我猜你想要像

这样的东西
find . -name "$3" -type f -exec sed -n "/$1/,/$2/s%^%{}%p" {} \;

这可以适用于使用xargs,但由于您希望每个文件都使用sed命令中的文件名,因此无论如何都要使用find -exec运行它。

$3的原始地点似乎不正确。我猜你想要什么,但上述希望是有道理的。

所以sed最终会运行类似

的内容
 sed -n "/foo/,/bar/s%^%/path/to/file:%p" /path/to/file

通过用文件名和冒号替换^(行首)来为匹配行添加前缀。