sed 替換美元符的問題

2022-08-05 00:21:20 字數 912 閱讀 6158

sed 替換美元符的問題

20121005 chenxin

pw=echo $pass_w|sed 's/\\$/\\\\$/g'

eg:i=echo "!@#$%"#i變數中會被賦值乙個包含"$"符號的字元

j=echo $i|sed 's/\\$/\\\\$ /g'#sed的第乙個$符號前可以是2個或者是3個轉義符,其他不行;第二個$符號前必須是4個轉義符;

#其他情況下,會預設將i變數的結束符給替換成乙個$,j變數就變成了「!@#$%$」,最後多了乙個$符號;

echo "$i=$i"

echo "$j=$j"

執行後輸出:

$i=!@#$%

$j=!@#$%

通過這種方式,就規避了expect中的send命令預設將$pass_w中的"$"後面的部分當做變數來處理,從而造成找不到值的情況;

備註:以上嘗試了很多次才成功,至於根本原因,如下:

原因分析:

直接在shell環境下,通過 手動輸入命令方式執 行:

echo "123$567" |sed 's/$/\$/g'

便將123$567轉換為123$567了;

但以上情況如果放置 到指令碼檔案裡, 比如t.sh中執行就會被替換成123$567$的情況;

因為是在雙重shell下,$前必須是兩層轉義,也就變成:

sed 's/\$/\\$/g' (標準的寫法)

第一次轉義後變成 sed 's/$/\$/g',然後在通過一次轉義,就達到預期的目的了(sed是發起的乙個獨立linux程序);

當send指令執行send 123$567時,其實輸入給對端的是 123$567,也就是預期的情況了(tcl的send執行中,跟tcl同樣會進行轉義操作);

:)

sed替換換行符

sed label n s n b label filename sed label n s n t label filename 上面的兩條命令可以實現將檔案中的所有換行符替換為指定的字串,如命令中的冒號。命令的解釋 label 這是乙個標籤,用來實現跳轉處理,名字可以隨便取 label 後面的b...

sed替換換行符「 n」

在一次sed使用中,執行命令 sed s n g file 發現,沒起到任何效果。後來,經查sed官方使用者手冊,才得知,sed是按行處理文字資料的,每次處理一行資料後,都會在行尾自動新增trailing newline,其實就是行的分隔符即換行符。如果非要使用sed命令,實現替換file文字內容的...

sed 的文字插入,新增,替換

給每個 log 檔案第一行插入 hello world,find name log xargs sed i 1 i hello world 給每個 log 檔案匹配模式 bcd 可以使用其他正則表達例如 w d w etc.行之前插入 hello world,find name log xargs ...