2016-07-30 114 views
1

我對linux shell腳本不太好,我需要一點幫助。Shell腳本編輯文件行

我想通過腳本編輯文件(查找行和編輯)。

原線爲:

#JVM_OPTS = 「$ JVM_OPTS -Djava.rmi.server.hostname = <主機名>」

我想取消註釋,並用127.0 replaye主機名。 0.1

JVM_OPTS = 「$ JVM_OPTS -Djava.rmi.server.hostname = 127.0.0.1」

回答

3

你可以參考set命令,更改與文件名你在工作名稱,

sed -i '[email protected]# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<hostname>"@JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1"@' filename 
+0

謝謝,該解決方案對我來說工作得很好。 :-) –

3

下面是做這件事:

sed -ie 's/# \(JVM_OPTS=.*=\).*/\1127.0.0.1"/' path/to/file 

也就是說,更換同組\(JVM_OPTS=.*=\)內捕獲文本行,所以一切從JVM_OPTS=直到另一個=標誌,並追加127.0.0.1"到底。

如果有可能開始# JVM_OPTS=文件中的其他行, 那麼你可以讓模式匹配更加嚴格,例如:

sed -ie 's/# \(JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=\).*/\1127.0.0.1"/' path/to/file 
+0

我沒有嘗試過這種解決方案,但它看起來像它可以對文件中的其他行也有效果,它以#JVM_OPTS開頭...... 我想編輯的文件有很多行, ,請參閱cassandra-env.sh。對不起,我沒有提到它。 但我想你的答案也會對其他人有所幫助:-) –

+1

查看我更新的答案以處理該案例 – janos

3

精細的答案,但他們不教它如何以及爲什麼工作紳士的方式做任何事情。

如果您正在使用的平凡的文本編輯器,編輯,你會調用命令 「編輯文件名」 後,使用三個命令:

S/^#//
S/<主機名> /127.0。 0.1/
W¯¯

所以,你可以使用管道直接提交這些命令編輯,指定「 - 」作爲第一個參數,這樣它不報告字符數在閱讀和寫作打擾你出文件:

(echo's/^#//'; echo's // 127.0.0.1 /';回聲w)| ed - filename

你不需要echo'q'也是因爲ed在輸入用完或遇到「文件結尾」時會自動退出(你可以通過點擊CTRL模擬鍵盤上的內容-D鍵而不是實際鍵入q)。

+0

感謝您的好解釋。我決定採取L.feir的解決方案。但我想你的口氣會在其他時間幫助別人和我。 –