[問題] sed為特殊字元加上跳脫字元問題

作者: NOBUNAGA01 (0.0)   2022-03-08 11:50:45
情境:
將文字檔裡的wireless ssid取出並sed到另外一個文字檔。
問題:
遇上包含/的ssid,sed指令會出事。
stackoverflow找到的解法:
放變數的時候用 ${ssid//\//\\/}在/前面加上escape。
問題1:
match pattern是 /\/,看不懂第一個/的用途,實驗過用\/
當pattern輸出結果也是一樣,這是為什麼呢?
實驗方式
ssid="TEST/SSID"
echo ${ssid//\//\\/}
echo ${ssid/\//\\/}
輸出都是TEST\/SSID
問題2:
取代的字串是\\/,就我的認知應該兩個都要加escape所以應該是\\\/
實驗結果也是兩個輸出都一樣,why???
echo ${ssid//\//\\/}
echo ${ssid//\//\\\/}
作者: CP64 (( ̄▽ ̄#)﹏﹏)   2022-03-08 12:33:00
參照 bash manpage 的 brace expansion${var/pattern/string} 如果 pattern 是 / 開頭會替換所有符合 pattern 的部分 反之只會替代第一個所以你第一個只是因為你只有一個要替換所以沒差至於第二個 因為後面的 / 本來就不會有特殊語意 所以沒差然後 如第一行 這不是 sed
作者: NOBUNAGA01 (0.0)   2022-03-08 13:29:00
感謝 原來是Parameter Substitution的部分
作者: rickieyang (Rickie Yang)   2022-03-08 18:18:00
把 sed 的分隔符號換掉就好了吧.echo "ssid=1\2/3" | sed -e 's|ssid=||'
作者: aalexx (aalexx.S)   2022-03-16 16:38:00
sed可以換符號,不一定要斜線

Links booklink

Contact Us: admin [ a t ] ucptt.com