Linux sed的一些问题
此命令没有问题:Linux sed的一些问题,linux,bash,sed,Linux,Bash,Sed,此命令没有问题: sed -i -E '/ChannelSetting=/{:loop /\\/{s/\\//g;N;bloop};s/(ChannelSetting=).*/\1/}' build_config/resource.properties 但是这个命令将出现在“sed:-e表达式#1,char 30:Unmatched{”: 造成错误的“和”有什么区别? 谢谢在第二种情况下,转义字符“\”由shell解释。 使用echo命令了解差异: >> echo "/Channe
sed -i -E '/ChannelSetting=/{:loop /\\/{s/\\//g;N;bloop};s/(ChannelSetting=).*/\1/}' build_config/resource.properties
但是这个命令将出现在“sed:-e表达式#1,char 30:Unmatched{”:
造成错误的“和”有什么区别?
谢谢在第二种情况下,转义字符“\”由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
通常需要混合使用两种类型的字符串分隔符:
- '(对于特殊字符为“\”)
- “(为了解释一些外壳变量):
myMatch='ChannelSetting='
sed -i -E "/$myMatch/"'{:loop /\\/{s/\\//g;N;bloop};s/('$myMatch').*/\1/}'
这是Bash shell loog在这两个输出之间的差异:
root@Server:~# echo "\\"
\
root@Server:~# echo '\\'
\\
“”中的反斜杠引用下一个字符,“”中的反斜杠只是一个反斜杠
顺便说一句,VAR也是如此:
root@Server:~# XX=12
root@Server:~# echo "$XX"
12
root@Server:~# echo '$XX'
$XX
检查一下,你会明白两者的区别。谢谢,我已经解决了这个问题。好的,很高兴知道@Mark
root@Server:~# XX=12
root@Server:~# echo "$XX"
12
root@Server:~# echo '$XX'
$XX