作者NOBUNAGA01 (0.0)
看板Linux
标题[问题] sed为特殊字元加上跳脱字元问题
时间Tue Mar 8 11:50:45 2022
情境:
将文字档里的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//\//\\\/}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.243.108.239 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1646711447.A.E67.html
1F:→ CP64: 参照 bash manpage 的 brace expansion 03/08 12:33
2F:→ CP64: ${var/pattern/string} 如果 pattern 是 / 开头会替换所有 03/08 12:34
3F:→ CP64: 符合 pattern 的部分 反之只会替代第一个 03/08 12:35
4F:→ CP64: 所以你第一个只是因为你只有一个要替换所以没差 03/08 12:35
5F:推 CP64: 至於第二个 因为後面的 / 本来就不会有特殊语意 所以没差 03/08 13:09
6F:→ CP64: 然後 如第一行 这不是 sed 03/08 13:10
7F:→ NOBUNAGA01: 感谢 原来是Parameter Substitution的部分 03/08 13:29
8F:推 rickieyang: 把 sed 的分隔符号换掉就好了吧. 03/08 18:18
9F:推 rickieyang: echo "ssid=1\2/3" | sed -e 's|ssid=||' 03/08 18:21
10F:推 aalexx: sed可以换符号,不一定要斜线 03/16 16:38