Linux

條件滿足時註釋掉文件中的行

  • November 11, 2021

我可以通過 vi 在文件中註釋掉某些行。在 100 個文件中完成這項工作是一項艱苦的活動。我可以通過 sed 或 awk 設置一個條件嗎,例如,我想設置一個條件來註釋掉所有包含這個client-ca-gh.ef.cd.1及以後的行。

該文件有接近 500 行,其中包括 client1-100 在內的 100 行,從 1 遞增到 100。在所有文件中都相同,唯一的區別是由於文件中的一些間距,行號確實不匹配。例如,在一個文件中,client5 在第 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

使用更通用的解決方案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

它將使您在缺失行、標題和其他行的數量、客戶端行之間的間距或隨機排序方面更加靈活。

對於就地編輯,使用spongefrommoreutils或者如果您正在執行 GNU awk ( gawk) 則使用就地選項:

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

引用自:https://unix.stackexchange.com/questions/632137