フォルダ内のすべてのファイルでパターンに一致する行をコメントアウトする方法

フォルダ内のすべてのファイルでパターンに一致する行をコメントアウトする方法

フォルダには多くのファイルがあります。特定のパターンがある場合は、各行をコメントアウトしたいと思います。

パターン例:

`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同じプログラムに渡すことができます。perlxargs -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"' _ {} \;

関連情報