如何将多行回显到来自grep结果的文件中

时间:2015-09-18 09:18:34

标签: linux bash grep

我想将多行回显到来自grep结果的文件中。

实际上,我使用命令grep来自某些文件的find . -name *.h -o -name *.c -o -name *.cpp | xargs grep -n -l --color Apache 文本:

./DIR/A.h
./DIR/B.cpp
./DIR/C.c

上述命令的输出如下:

-l

借助grep命令的A.h B.cpp C.c选项,我可以从grep结果中获取文件名。

现在我想在文件cappedValue = 0.1 + 0.8 * uncappedValue 中插入多行。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

试试这个:

find . -name *.h -o -name *.c -o -name *.cpp | \
xargs grep -n -l --color Apache | \
xargs sed -i '1s/^/text to prepend\n/'

这将在每个文件上添加文本“text to prepend”。

答案 1 :(得分:0)

这取决于文件中要插入行的位置。在最简单的情况下,您可以将它们追加到最后:

find . -name '*.h' -o -name '*.c' -o -name '*.cpp' |
xargs grep -n -l |
while read FILE; do echo -e "line1\nline2" >>"$FILE"; done

这里我们使用while循环将每个文件名读取到FILE变量,并将echo输出附加到每个文件的末尾。

更新:用于插入文件的开头:

find . -name '*.h' -o -name '*.c' -o -name '*.cpp' |
xargs grep -n -l |
while read FILE; do (echo -e "line1\nline2"; cat "$FILE") >>"$FILE.new" && mv "$FILE.new" "$FILE"; done

对于更高级的案例,您可以使用sed具有特殊命令(ai)。

相关问题