我正在編寫一個腳本,用於取消文件中幾行代碼的註釋。這就是我想要取消註釋:取消sed代碼
#export PATH="$HOME/.rbenv/bin:$PATH"
#eval "$(rbenv init -)"
所以,我做我的研究,發現了這個命令是做什麼我在尋找:
sed -i '/<pattern>/s/^#//g' file
那麼我將如何調整它做的事我在找什麼?我已經嘗試在命令內部粘貼文本,盡我所能避免所有引號,但似乎並不奏效。
我正在編寫一個腳本,用於取消文件中幾行代碼的註釋。這就是我想要取消註釋:取消sed代碼
#export PATH="$HOME/.rbenv/bin:$PATH"
#eval "$(rbenv init -)"
所以,我做我的研究,發現了這個命令是做什麼我在尋找:
sed -i '/<pattern>/s/^#//g' file
那麼我將如何調整它做的事我在找什麼?我已經嘗試在命令內部粘貼文本,盡我所能避免所有引號,但似乎並不奏效。
評論的是評論,而不是流量控制。
而不是試圖修改文件以切換這些行,通過環境變量控制它們的執行。
if [[ -v enable_ruby ]]; then
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
fi
現在,如果變量enable_ruby
設置爲環境中的任何值,PATH
將被修改,並且被配置ruby
。否則,這兩行將被忽略。
$ bash myScript # Don't do the ruby stuff
$ enable_ruby=1 bash myScript # Do the ruby stuff
$ export enable_ruby= # The empty string is sufficient
$ bash myScript # Do the ruby stuff
$ unset enable_ruby
$ bash myScript # Don't do the ruby stuff
@ThomasKühn指出,您必須謹慎而費力地逃避sed
的模式。
替代更聰明地工作,而不是更辛苦,看看你是否可以事先標記線:
#export PATH="$HOME/.rbenv/bin:$PATH" # setrbpath
#eval "$(rbenv init -)" # runrbinit
現在你只需sed -i -e '/setrbpath/s/^#//' file
,這將是對小的修改模板文件穩定。
這是很好的建議! –
要完成這項工作,只需在字符串操作中使用awk。鑑於這些輸入文件:
$ cat file1
#export PATH="$HOME/.rbenv/bin:$PATH"
#eval "$(rbenv init -)"
$ cat file2
This is what I'm trying to uncomment:
#export PATH="$HOME/.rbenv/bin:$PATH"
#eval "$(rbenv init -)"
So I did my research and found this command that does what I'm looking for
這就是你需要:
$ awk 'NR==FNR{a[$0];next} $0 in a{sub(/./,"")} 1' file1 file2
This is what I'm trying to uncomment:
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
So I did my research and found this command that does what I'm looking for
,或者目標字符串可能出現中線,而不是總爲整條生產線:
$ awk 'NR==FNR{a[$0];next} {for (i in a) if (s=index($0,i)) $0=substr($0,1,s-1) substr($0,s+1)} 1' file1 file2
This is what I'm trying to uncomment:
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
So I did my research and found this command that does what I'm looking for
無論目標字符串包含什麼字符,以上都將起作用。
''只是一個正則表達式的佔位符,用於匹配要取消註釋的行(和*僅*這些行)。不幸的是,很難說這個表達應該是什麼;所顯示的兩條線沒有太多共同之處,我們不知道您*不希望匹配的其他行可能出現在文件中。用數字範圍(比如'6,7')替換'/ /'可能會更容易,以匹配您想取消註釋的行號。 –
chepner
是的,我知道''。另外,我不需要在一個命令中取消兩條線的註釋。 –
PoVa
關於你的最後一句話,你究竟做了什麼?你是什麼意思,它不*看起來*工作?它要麼取消註釋所需的行,要麼沒有註釋。 – chepner