Shell-Script

shell 腳本 - 刪除特定模式之前的字元

  • May 4, 2019

我有我的/etc/hosts

#192.168.54.144  name1
#192.168.54.144   name2
192.168.54.143   name3

我想刪除所有#後跟IP地址Ipv4的字元以獲得:

192.168.54.144  name1
192.168.54.144   name2
192.168.54.143   name3

我想我應該使用sedor awkor cut

謝謝

使用 GNU sed

僅匹配真實 IP(通過):

sed -E 's/^#(((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]))/\1/' file

或簡單匹配,檢查數字後#

sed 's/^#\([[:digit:]]\)/\1/' file

這只會列印結果,添加-i到編輯文件中。


您也可以使用perlwith lookehead 來不需要反向引用:

perl -pe 's/^\#(?=[[:digit:]])//' file

命令

sed  "/^#[0-9]*\.[0-9]*\.[0-9]*\.[0-9]\{3\}/s/#//g" filename

輸出

sed  "/^#[0-9]*\.[0-9]*\.[0-9]*\.[0-9]\{3\}/s/#//g" filename
192.168.54.144  name1
192.168.54.144   name2
192.168.54.143   name3

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