2013-02-05 23 views
0

我想創建一個腳本來註釋掉我的Mac OS X主機文件中包含.com的行。還有一個扭轉它。添加文件的某些行

所以這個:

127.0.0.1 foo.com 
127.0.0.1 bar.com 
127.0.0.1 baz 
127.0.0.1 qux 

將成爲:

#127.0.0.1 foo.com 
#127.0.0.1 bar.com 
127.0.0.1 baz 
127.0.0.1 qux 

我看了看周圍的谷歌和sed的手冊頁,並試圖在bash一些事情和sed,但是我還沒有來關。

sed 's/^/^#/' | grep '.com' < hosts

grep '.com' | sed 's/^/^#/' < hosts

感謝您的幫助!

+0

試試這個http://stackoverflow.com/questions/742466/how-can -i-reverse-the-order-of-a-file –

+0

@Fredrik這有什麼要做的呢? – Barmar

+0

doh,除OP之外沒有其他說明「還有一個可以將其撤銷。」因此上面的鏈接 –

回答

7
sed '/\.com/s/^/#/' < hosts 

解讀:

  • /\.com/ - 只匹配這個表達式
  • s/^/#/線執行命令的其餘部分 - 在該行的開頭插入#

如果您想要替換原始文件,請使用sed的-i選項:

sed -i.bak '/\.com/s/^/#/' hosts 

這將重命名爲hostshosts.bak並創建一個新的hosts與更新的內容。

要取消它,使用:

sed -i.bak '/^#.*\.com/s/^#//' hosts 
+0

這是否寫入文件?原因我試過了,它沒有 – noMAD

+0

不,它寫入stdout。 – Barmar

+0

我認爲OP希望將它保存到文件上,因爲如果他希望在標準輸出中使用它,他可以在他的命令前添加一個'cat '並且它會工作 – noMAD

0

使用awk

awk '$2 ~ /.com/{$0 = "#"$0;}{print}' temp.txt 

輸出

#127.0.0.1 foo.com 
#127.0.0.1 bar.com 
127.0.0.1 baz 
127.0.0.1 qux