unix中替换字符的转义字符
Escape character for replacement character in unix
&
的转义字符是什么(将匹配项包含在替换中)?
我需要用 &quo;cat&quo;
替换文件中的 cat
cat file | sed -e 's\cat\&quo;cat&quo;\'
Bourne 或 POSIX shell 中需要转义的字符不同于 Bash。通常(非常)Bash 是那些 shell 的超集,因此您在 shell
中转义的任何内容都应在 Bash.
中转义
一个不错的通用规则是 "if in doubt, escape it"。但是转义某些字符会赋予它们特殊的含义,例如 \n
。这些列在 Quoting
和 echo
下的 man bash
页面中。
除此之外,对任何非字母数字的字符进行转义,这样更安全。我不知道一个确定的列表。
手册页在某处列出了它们,但没有在一个地方列出。学好语言,才是正途。
让我印象深刻的是 !
。这是 Bash(和 csh)中的特殊字符(历史扩展),但在 Korn shell 中不是。甚至 echo "Hello world!"
也会出现问题。像往常一样使用单引号会删除特殊含义。
\
不是替换定界符的最佳选择 – /
经常被使用,并且更适合这种情况,因为 \
用于转义:
sed 's/cat/\&quo;cat\&quo;/' file
请注意,您不必使用 cat
来通过管道传输到 sed;只需将输入文件作为参数。
&
必须转义才能获得文字 &
;否则,它代表模式的整个匹配部分 space(参见 manual):
$ sed 's/XXX/~&~/' <<< 'aaaXXXaaa'
aaa~XXX~aaa
$ sed 's/XXX/~\&~/' <<< 'aaaXXXaaa'
aaa~&~aaa
&
的转义字符是什么(将匹配项包含在替换中)?
我需要用 &quo;cat&quo;
cat
cat file | sed -e 's\cat\&quo;cat&quo;\'
Bourne 或 POSIX shell 中需要转义的字符不同于 Bash。通常(非常)Bash 是那些 shell 的超集,因此您在 shell
中转义的任何内容都应在 Bash.
一个不错的通用规则是 "if in doubt, escape it"。但是转义某些字符会赋予它们特殊的含义,例如 \n
。这些列在 Quoting
和 echo
下的 man bash
页面中。
除此之外,对任何非字母数字的字符进行转义,这样更安全。我不知道一个确定的列表。
手册页在某处列出了它们,但没有在一个地方列出。学好语言,才是正途。
让我印象深刻的是 !
。这是 Bash(和 csh)中的特殊字符(历史扩展),但在 Korn shell 中不是。甚至 echo "Hello world!"
也会出现问题。像往常一样使用单引号会删除特殊含义。
\
不是替换定界符的最佳选择 – /
经常被使用,并且更适合这种情况,因为 \
用于转义:
sed 's/cat/\&quo;cat\&quo;/' file
请注意,您不必使用 cat
来通过管道传输到 sed;只需将输入文件作为参数。
&
必须转义才能获得文字 &
;否则,它代表模式的整个匹配部分 space(参见 manual):
$ sed 's/XXX/~&~/' <<< 'aaaXXXaaa'
aaa~XXX~aaa
$ sed 's/XXX/~\&~/' <<< 'aaaXXXaaa'
aaa~&~aaa