![](/img/trans.png)
[英]How to grep the line number of result of that particular file, from multiple files
[英]How to echo multiple lines into files coming from a grep result
我想將多行回顯到來自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
借助grep命令的-l
選項,我可以從grep結果中獲取文件名。
現在,我想在文件Ah B.cpp Cc
插入多行。
我怎樣才能做到這一點 ?
嘗試這個:
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
”。
這取決於您要在其中插入行的文件位置。 在最簡單的情況下,您可以將它們附加到末尾:
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
,該sed
具有特殊的命令( a
和i
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.