sed中的转义反斜杠字符
我需要修改一些Windows路径 比如说,sed中的转义反斜杠字符,sed,Sed,我需要修改一些Windows路径 比如说, D:\usr 到 因此,我创建了一个变量 $path = "first\usr" 然后使用以下命令: sed -i -e 's!\\usr!${path}/g;' test.txt 但是,最终会出现以下情况: D:\firstSr 如何在sed中转义\u?假设正确分配了路径变量(分配中没有空格:路径='first\usr'),使用一个示例路径逐步修复输入文件test.txt: $ cat test.txt D:\usr 你原来的命令 $ se
D:\usr
到
因此,我创建了一个变量
$path = "first\usr"
然后使用以下命令:
sed -i -e 's!\\usr!${path}/g;' test.txt
但是,最终会出现以下情况:
D:\firstSr
如何在sed中转义
\u
?假设正确分配了路径
变量(分配中没有空格:路径='first\usr'
),使用一个示例路径逐步修复输入文件test.txt
:
$ cat test.txt
D:\usr
$ sed 's!\\usr!${path}/g;' test.txt
sed: -e expression #1, char 18: unterminated `s' command
没有什么作用,因为您已经混合了
和/
作为分隔符$ sed 's!\\usr!${path}!g;' test.txt
D:${path}
现在,由于单引号,根本不会发生插值。我怀疑这些只是复制粘贴错误,因为您显然得到了一些输出$ sed "s!\\usr!${path}!g" test.txt
bash: !\\usr!${path}!g: event not found
现在,这与我们的观点相冲突。我们可以逃脱代码>,或使用其他分隔符
/
作为分隔符:
$ sed "s/\\usr/${path}/g" test.txt
D:\firstSr
现在我们是问题真正开始的地方${path}
扩展为first\usr
,但是\u
在GNU中有一个特殊的含义,在替换字符串中使用:它将以下字符大写,因此是S
即使没有特殊含义,\u
也很可能只是扩展到u
,反斜杠也会消失$ path='first\\usr'
$ sed "s/\\usr/${path}/g" test.txt
D:\first\usr
这很有效根据您使用的shell,您可以使用参数扩展在替换字符串中加倍
\
,并防止\u
解释:
(注意,我在此筛选器中还引用了其他sed元字符)。可能的重复您还需要双重转义新值的内容,而不仅仅是sed搜索模式您使用的是什么shell或脚本语言
$path=“first\usr”
看起来像Perl,但其余的不像。。。
$ path='first\\usr'
$ sed "s/\\usr/${path}/g" test.txt
D:\first\usr
path="first\usr"
sed -e "s/\\usr/${path//\\/\\\\}/g" <<< "D:\usr"
path=$(echo "$path" | sed 's/[][\\*.%$]/\\&/g')