我在 Windows XP 上使用 CMD 用 Sed 替换特殊文本。我使用此命令替换特殊字符,例如$ or *
:
sed -i "s/\*/123/g;" 1.txt
但是我必须使用什么命令来替换ciao!
文本文件中的这些字符串?可能吗?
\\
\\\
""
sed.exe -i "s/{\*)(//123/
sed -i "s/\\/123/g;" 1.txt
前面的命令不起作用,因为我有\
,"
以及 sed 用来制作正则表达式的其他特殊字符串。
答案1
寻找文字使用正则表达式的字符串,当搜索字符串包含特殊字符时,有时并不像寻找模式那么简单,但您可以通过一点点技巧来完成。
注意:该echo
命令必须适应 CMD 特殊字符,因此它需要^^
转义单个字符^
并^|
转义...如果您直接在文件中输入,则 |
不需要 CMD 的转义字符。^
步骤1:创建一个名为文字搜索字符串.txt,其中包含要替换的准确(未改变)字符串。有两种方法可以创建此文件:
作为在 CMD 下发出的命令命令行或者作为 .cmd/.bat 中的命令命令脚本。
echo sed -i^^/\\*$/$[{" ;"> literal-srch-strings.txt
制作 文字搜索字符串.txt在您的文本编辑器中。
在这种情况下,您不应该使用 CMD 转义字符^
,因此该行只有一个^
,而不是^^
-- 这是因为您正在绕过 CMD shell。
以下是 .txt 文件中所需的内容(正如文件名所示:)sed -i^/\\*$/$[{" ;"
第2步:做一个sed 脚本,命名 字符串转正则表达式.sed,将字符串转换为 sed 正则表达式。
请注意,CMD 转义字符的相同问题也^
适用于此步骤,因此,再次重申,有两种方法可以创建 .sed 文件:
作为命令:
echo s/[]\/$*.^^^|[]/\\^&/g; s/.*/s\/^&\/Ciao!\/g/> str-to-regex.sed
使用文本编辑器创建一个名为字符串转正则表达式.sed,包含:
s/[]\/$*.^|[]/\\&/g; s/.*/s\/&\/Ciao!\/g/
步骤3:跑过sed 脚本将字符串转换为 sed 正则表达式,并将
其输出发送到另一个 sed 脚本,替换文本.sed,这将进行实际替换。
sed -f str-to-regex.sed literal-srch-strings.txt > replace-text.sed
步骤4:跑步替换文本.sed-- 我们可以使用以下测试文字搜索字符串.txt作为输入文件,但当然您可以使用任何输入文件。
sed -f replace-text.sed literal-srch-strings.txt
输出如下:
Ciao!
答案2
要覆盖命令行(或批处理文件中的行)上特殊字符的含义,请使用 ^(插入符号)字符对其进行转义。要输入文字插入符号,请连续使用两个插入符号。