2014-12-03 26 views
0

我試圖刪除不以#開頭,並從文件刪除行不以#開始,匹配模式

# 127.0.0.1  localhost 
# ::1    localhost 

127.0.0.1  localhost   <---- line I want to delete 
127.0.0.2  abcabc 

我曾嘗試以下腳本匹配的模式localhost上的線,但不起作用。

sed -i "/^[^#](.*)localhost$/d" /etc/hosts 

sed -i "/^([0-9]{1,3}\.){3}[0-9]{1,3}/d" /etc/hosts 

如何刪除該行?

回答

1

默認sed以()作爲文字字符,而不是作爲捕獲組。

sed -i "/^[^#].*localhost$/d" /etc/hosts 

OR

sed -i "/^[^#].* \+localhost.*$/d" /etc/hosts 

可以存在的空間中一些機會剛後會呈現給串localhost,所以我說旁邊在上面的命令字符串localhost.*

例子:

$ cat file 
# 127.0.0.1  localhost 
# ::1    localhost 

127.0.0.1  localhost 
127.0.0.2  abcabc 
$ sed "/^[^#].*localhost$/d" file 
# 127.0.0.1  localhost 
# ::1    localhost 

127.0.0.2  abcabc 
+0

或'sed的 「/^[^#].*[[:space:]]\+localhost$/d」 file' – 2014-12-03 05:13:53

+0

這工作。謝謝。 ... – noufalcep 2014-12-03 05:26:45

+0

很高興解決。 – 2014-12-03 05:29:45

0
"/^[^#]*localhost$/d" 

你可以簡單地使用它作爲參數sed刪除所需的行。

0
awk '/localhost/ && !/#/ {next} 1' 

結果

# 127.0.0.1  localhost 
# ::1    localhost 

127.0.0.2  abcabc 
+2

您應該使用'!/ ^#/'來判斷註釋是否在行首。除此之外'awk'簡單易懂:跳過所有'localhost'並且不包含'#'的行 – Jotne 2014-12-03 06:31:46

相關問題