条件が満たされると、ファイルの行をコメントアウトします。

条件が満たされると、ファイルの行をコメントアウトします。

viを介してファイル内の特定の行をコメントアウトできます。何百ものファイルにわたってこれを行うのは難しい作業です。 sedまたはawkで条件を設定できますか?たとえば、条件を設定したいと思います。すべての行をコメントアウトします。その中にはこれclient-ca-gh.ef.cd.1とそれ以上があります。

ファイルにはほぼ500行があり、そのうちclient1-100には100行があり、1から100まで増加します。すべてのファイルは同じであり、唯一の違いは、ファイルの空白のために行番号が一致しないことです。たとえば、client5は1つのファイルでは3行にあり、別のファイルでは4行にあります。それ以外の場合は、行範囲を持つすべてのファイルにsedを使用します。

:3,5s/client/#client
1 client-ca-gh.ef.cd.1
2 client-ca-gh.ef.cd.2
3 #client-ca-gh.ef.cd.3
4 #client-ca-gh.ef.cd.4
5 #client-ca-gh.ef.cd.5

ベストアンサー1

より一般的な解決策は以下を使用します。awk

次のファイルの場合:

header
header
client-ca-gh.ef.cd.1
client-ca-gh.ef.cd.4
client-ca-gh.ef.cd.2
client-ca-gh.ef.cd.3
other stuff

client-ca-gh.ef.cd.5
more stuff

a)を使用して行を検索client-ca-gh.ef.cd.し、b)最後の数字が指定された値より高い場合は、その行をコメントアウトできます。

awk -F. '/^client-ca-gh\.ef\.cd\./ { if ($NF >= 3) {$0="#"$0}} {print}' file

結果:

header
header
client-ca-gh.ef.cd.1
#client-ca-gh.ef.cd.4
client-ca-gh.ef.cd.2
#client-ca-gh.ef.cd.3
other stuff

#client-ca-gh.ef.cd.5
more stuff

不足している行、ヘッダー、その他の行数、クライアント行間の間隔、またはランダムな順序付けにより、より柔軟性を提供します。

内部編集の場合は、GNU awk()を実行している場合はsponge内部オプションを使用してください。moreutilsgawk

 awk -F. 'AWK CODE' file | sponge file
 awk -i inplace -F. 'AWK CODE' file

おすすめ記事