フォルダには多くのファイルがあります。特定のパターンがある場合は、各行をコメントアウトしたいと思います。
パターン例:
`include "xyz.vh"
予想出力:
// `include "xyz.vh"
だから私にも同じ指示をください。
答え1
これはあなたに役立ちます。
sed '/`include "xyz.vh"/s/^/\/\/ /' filename
すべてのファイルからパターンを検索するには、次のコマンドを使用できます。
find . -type f -exec sed '/`include "xyz.vh"/s/^/\/\/ /' {} \;
もう一つの方法はperl
、
perl -p0e 's/(.*`include "xyz.vh"\n)/\/\/ \1/g' file
答え2
grep
目的のパターンを含むファイルをフィルタリングするために使用されます。
grep -rlZ 'pattern'
-r
サブディレクトリを含むディレクトリを繰り返し検索するオプション(デフォルトは現在のディレクトリ)-l
パターンに一致するファイル名のみを一覧表示-Z
ゼロバイトで区切られた出力(改行文字などの珍しい文字を含むファイル名を処理するため)。その後、検索と置換を実行するために使用するか、sed
同じプログラムに渡すことができます。perl
xargs -0
一緒に入れてください:
grep -rlZ '`include "xyz.vh"' | xargs -0 perl -i -pe 's|^|// | if /`include "xyz.vh"/'
-i
オプションは、変更として入力ファイル自体を変更します。
答え3
そしてawk
:
awk '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt
最新のGNUを使用してファイルを編集するにはawk
:
awk -i inplace '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt
他のすべてのawk
実装では、一時ファイルを使用してください。
awk '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt >file.txt.tmp && \
mv file.txt.tmp file.txt
現在のディレクトリから始まるすべてのファイルに対して再帰的に次のことを行います。
find . -type f -exec awk -i inplace '/`include "xyz.vh"/{print "// " $0; next} 1' {} \;
find . -type f -exec sh -c 'awk "/`include "xyz.vh"/ {print "// " $0; next} 1" "$1" \
>"$1".tmp && mv "$1".tmp "$1"' _ {} \;