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 ...