gpt4 book ai didi

linux - sed 的一些问题

转载 作者:太空狗 更新时间:2023-10-29 11:13:46 25 4
gpt4 key购买 nike

这个命令没有问题:

sed -i -E '/ChannelSetting=/{:loop /\\/{s/\\//g;N;bloop};s/(ChannelSetting=).*/\1/}' build_config/resource.properties

但是这个命令会出现 "sed: -e expression #1, char 30: Unmatched {":

sed -i -E "/ChannelSetting=/{:loop /\\/{s/\\//g;N;bloop};s/(ChannelSetting=).*/\1/}" build_config/resource.properties

导致错误的 "和 ' 有什么区别?谢谢

最佳答案

在第二种情况下,转义字符“\”由您的 shell 解释。使用 echo 命令了解差异:

>> echo "/ChannelSetting=/{:loop /\\/{s/\\//g;N;bloop};s/(ChannelSetting=).*/\1/}" 
/ChannelSetting=/{:loop /\/{s/\//g;N;bloop};s/(ChannelSetting=).*/\1/}

请注意,'\' 在每次出现时只出现一次:缺少的那些已被您的 shell 解释为转义字符。所以 sed 命令只接收每次出现的第二个“\”。

>> echo '/ChannelSetting=/{:loop /\\/{s/\\//g;N;bloop};s/(ChannelSetting=).*/\1/}'
/ChannelSetting=/{:loop /\\/{s/\\//g;N;bloop};s/(ChannelSetting=).*/\1/}

如您所见,在第二种情况下,所有字符都按原样发送到 sed。

通常您需要混合使用两种类型的字符串分隔符:

  • '(特殊字符如'\')
  • ”(为了解释一些 shell 变量):

例子:

myMatch='ChannelSetting='
sed -i -E "/$myMatch/"'{:loop /\\/{s/\\//g;N;bloop};s/('$myMatch').*/\1/}'

关于linux - sed 的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27597338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com