我對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」
我對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」
你可以參考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
下面是做這件事:
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
我沒有嘗試過這種解決方案,但它看起來像它可以對文件中的其他行也有效果,它以#JVM_OPTS開頭...... 我想編輯的文件有很多行, ,請參閱cassandra-env.sh。對不起,我沒有提到它。 但我想你的答案也會對其他人有所幫助:-) –
查看我更新的答案以處理該案例 – janos
精細的答案,但他們不教它如何以及爲什麼工作紳士的方式做任何事情。
如果您正在使用的平凡的文本編輯器,編輯,你會調用命令 「編輯文件名」 後,使用三個命令:
S/^#//
S/<主機名> /127.0。 0.1/
W¯¯
所以,你可以使用管道直接提交這些命令編輯,指定「 - 」作爲第一個參數,這樣它不報告字符數在閱讀和寫作打擾你出文件:
(echo's/^#//'; echo's // 127.0.0.1 /';回聲w)| ed - filename
你不需要echo'q'也是因爲ed在輸入用完或遇到「文件結尾」時會自動退出(你可以通過點擊CTRL模擬鍵盤上的內容-D鍵而不是實際鍵入q)。
感謝您的好解釋。我決定採取L.feir的解決方案。但我想你的口氣會在其他時間幫助別人和我。 –
謝謝,該解決方案對我來說工作得很好。 :-) –