我有一個包含以下資料的檔案。
192.168.1.1
255.255.255.0
192.168.1.10
192.168.1.2
255.255.255.0
192.168.1.10
#192.168.2.1
#255.255.255.0
#192.168.2.10
#192.168.2.2
#255.255.255.0
#192.168.2.10
現在我想實作以下
- 從已經有它的行的開頭洗掉#。
- 將 # 放在沒有它的行的開頭。
最終檔案看起來像
#192.168.1.1
#255.255.255.0
#192.168.1.10
#192.168.1.2
#255.255.255.0
#192.168.1.10
192.168.2.1
255.255.255.0
192.168.2.10
192.168.2.2
255.255.255.0
192.168.2.10
我試圖通過 sed 在我的腳本中使用以下命令來實作這一點,但它不起作用。
用于評論
sed -i -e "/192.168.1./{N;N;p;}/s/^#*/#/"
洗掉評論
sed -i -e "/192.168.2./{N;N;p;}/s/^#*//"
但 sed 在下面拋出錯誤。
sed: -e expression #1, char 21: extra characters after command
任何建議。
uj5u.com熱心網友回復:
像這樣的東西會起作用:
sed '/^#/{s/^#//;b};s/^./#/' infile
更具可讀性:
sed '
/^#/ { # If a line starts with "#"
s/^#// # Remove the leading "#"
b # Move to next line
}
s/^./#/ # If the line is not empty, prepend "#"
' infile
uj5u.com熱心網友回復:
不知道你的表達中有什么錯誤,但想到的一個技巧是:
- 將 a 添加
#到所有行(因此注釋行將以 開頭##) - 洗掉所有
##s。
即,如果您的 bash 腳本中有一個回圈,您可以執行以下操作:
for line in $(cat myfile.txt); do
echo "#$line" | sed -E 's|^(##)?(.*)|\2|'
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417454.html
標籤:
下一篇:僅在前一個作業完成時執行作業
