我想将多行回显到来自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
中插入多行。
我该怎么做?
答案 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
具有特殊命令(a
和i
)。