Linux
條件滿足時註釋掉文件中的行
我可以通過 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
它將使您在缺失行、標題和其他行的數量、客戶端行之間的間距或隨機排序方面更加靈活。
對於就地編輯,使用
sponge
frommoreutils
或者如果您正在執行 GNU awk (gawk
) 則使用就地選項:awk -F. 'AWK CODE' file | sponge file awk -i inplace -F. 'AWK CODE' file