2013-06-06 22 views
0

我想要做以下替換在文本文件中UNIX命令:關於「sed的」

原始字符串:"---a---"

置換後:"---\a---"

,我運行以下命令:

sed -r -e "s/-(a)-/-\\\1-/g" test.txt 

但它沒有給出正確的結果。我應該使用什麼命令參數?

+0

感謝您的回答。我錯誤地刪除了一個答案。對不起。 – jun

回答

1

請記住,反斜槓在Bash的雙引號字符串以及sed本身中都很重要。無論是使用單引號:

sed -r -e 's/-(a)-/-\\\1-/g' test.txt 

再或者逃避反斜槓:

sed -r -e "s/-(a)-/-\\\\\\1-/g" test.txt 

如果您呼應琴絃,你會看到發生了什麼:

$ echo "s/-(a)-/-\\\1-/g" 
s/-(a)-/-\\1-/g 
$ echo 's/-(a)-/-\\\1-/g' 
s/-(a)-/-\\\1-/g 
$ echo "s/-(a)-/-\\\\\\1-/g" 
s/-(a)-/-\\\1-/g 

第一個(原始)只是看起來像一個文字反斜槓後面是一個文字1到sed。

0

嘗試sed -r -e "s/-(a)-/-\\\\\\1-/g"sed -r -e 's/-(a)-/-\\\1-/g'

的問題是,\是bash的,如果你使用雙引號抓獲。

0

你有一個

sed -r -e "s/-(a)-/-\\\a-/g" test.txt 
0

隨着"更換1次,你將不得不做這樣的事情:

[jaypal:~/Temp] echo "---a---" | sed -r "s/-(a)-/-\\\\\1-/g" 
---\a--- 
0

這麼多的答案......

Kaizen ~/so_test 
$ echo "---a---" | sed -n 's/a/\\a/p' 
---\a--- 

既然你有一個文本文件,下面應該工作:

sed -i 's/a/\\a/g' filename.txt ; 

對此有幫助嗎?