export JAVA_HOME=/usr/bin/java
我怎麼能評論這行,這行後添加一個新行。
預期的結果:
#export JAVA_HOME=/usr/bin/java
export JAVA_HOME=${java_path}
我已經試過這
我嘗試以下sed -e '/export JAVA_HOME=/usr/bin/java/ s/^#*/#/' < file.txt
添加評論僅當它不存在,但不工作
謝謝提前
export JAVA_HOME=/usr/bin/java
我怎麼能評論這行,這行後添加一個新行。
預期的結果:
#export JAVA_HOME=/usr/bin/java
export JAVA_HOME=${java_path}
我已經試過這
我嘗試以下sed -e '/export JAVA_HOME=/usr/bin/java/ s/^#*/#/' < file.txt
添加評論僅當它不存在,但不工作
謝謝提前
請嘗試以下操作(假定爲GNU Sed):
sed -r '\|^(export JAVA_HOME=)/usr/bin/java$| {s//#&\n\1${java_path}/}' file.txt
隨着BSD(OSX)桑達(也應該與GNU桑達工作),事情變得更加複雜(假設bash
,ksh
,或zsh
作爲外殼,由於採用的$'\n'
,一個ANSI C-quoted string,以產生一個面值換行符炭):
sed -E '\|^(export JAVA_HOME=)/usr/bin/java$| {s//#&\'$'\n''\1${java_path}/;}' file.txt
A(希望)符合POSIX標準溶液(又一個更復雜一點;還假定bash
,ksh
,或zsh
作爲殼):
sed '\|^\(export JAVA_HOME=\)/usr/bin/java$| {s//#&\'$'\n''\1${java_path}/;}' file.txt
正如你所看到的,不同的sed
實現需要不同的解決方案,因此,特別是sed
和awk
,但與一般的Unix工具,它的建議提及其平臺或明確要求跨平臺兼容的解決方案。
注:通常情況下,/.../
用於分隔在sed命令的正則表達式,但也可以選擇不同的分隔符,如果你想避免逃避/
字符是有幫助的。在正則表達式本身。在這裏,我選擇|
- 注意:開幕|
必須\
轉義(你做不有s///
選擇備選分隔符,必須這樣做)。
至於爲什麼你的命令,sed -e '/export JAVA_HOME=/usr/bin/java/ s/^#*/#/' < file.txt
,沒有工作:
你忘了躲避/
字符。在正則表達式\/
,這是必要的,因爲您的Sed地址使用/
作爲正則表達式分隔符。
s/^#*/#/
查找零個或多個上匹配的行現有#
字符,並與剛剛#
替換它們 - 在特定情況下,無操作。
s
的函數,在什麼情況下地址匹配(在此選擇匹配行腳本開始正則表達式),您必須使用emtpy正則表達式隱含操作,即s//.../
,如在上面的解決方案中。&
;如果有捕捉組,在上述方案中,您可以參考一下他們的指標捕捉:\1
指第一組,...謝謝,這工作。我做了一個'sed -i.bak'來備份存在文件,並且多次運行該命令以確保它不會一次又一次地追加同一行。 – MO12
你嘗試過什麼來解決這個問題? –
我試過如下 sed -e'/ export JAVA_HOME =/usr/bin/java/s/^#* /#/'
MO12
請點擊「編輯」並將其放入問題中,而不是評論。 –