[英]How can I use `sed` to replace the single quotes enclosing a directory with double quotes
假設我有一個包含以下內容的file
:
ENV_VAR='/foo/`whoami`/bar/'
sh my_script.sh 'LOL'
我要替換-使用sed
包圍目錄名稱的單引號 ,而不是包圍似乎不是目錄的內容(例如腳本的參數)的單引號 。
也就是說,在運行sed
命令之后,我希望獲得以下輸出:
ENV_VAR="/foo/`whoami`/bar/"
sh my_script.sh 'LOL'
這樣做的目的是在不使用tr
來將'
替換為"
或sed
像s/'/"/g
情況下實現這一點,因為我不想替換似乎不是目錄的行。
請注意sed
在AIX
上運行,因此沒有GNU sed
可用。
如果我像這樣使用sed
:
sed "s;'=.*/.*';&;g" file
... &
變量保存先前匹配的正則表達式,即: ='/foo/`whoami`/bar/'
。 但是,我不知道如何進行替換,因此單引號變成了雙引號 。
我想知道是否有辦法通過sed
僅使用sed
進行這項工作。
這將完成工作:
/usr/bin/sed -e "/='.*\\/.*'/ s/'/\\"/g" file
基本上,您只需要普通的'=>“替換,而不是所有行,僅是與模式='.*\\/.*'/
匹配的='.*\\/.*'/
。而且,在s命令中,您只需要轉義” 。
這應該工作:
sed "s/'\(.*\/.*\)'/\"\1\"/g"
捕獲'
之間的部分,並使用反向引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.