用 sed 替换特殊文本?

用 sed 替换特殊文本?


我在 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,其中包含要替换的准确(未改变)字符串。有两种方法可以创建此文件:

  1. 作为在 CMD 下发出的命令命令行或者作为 .cmd/.bat 中的命令命令脚本

    echo sed -i^^/\\*$/$[{" ;"> literal-srch-strings.txt

  2. 制作 文字搜索字符串.txt在您的文本编辑器中。
    在这种情况下,您不应该使用 CMD 转义字符^,因此该行只有一个^,而不是^^-- 这是因为您正在绕过 CMD shell。
    以下是 .txt 文件中所需的内容(正如文件名所示:)

    sed -i^/\\*$/$[{" ;"


第2步:做一个sed 脚本,命名 字符串转正则表达式.sed,将字符串转换为 sed 正则表达式。
请注意,CMD 转义字符的相同问题也^适用于此步骤,因此,再次重申,有两种方法可以创建 .sed 文件:

  1. 作为命令:

    echo s/[]\/$*.^^^|[]/\\^&/g; s/.*/s\/^&\/Ciao!\/g/> str-to-regex.sed

  2. 使用文本编辑器创建一个名为字符串转正则表达式.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

要覆盖命令行(或批处理文件中的行)上特殊字符的含义,请使用 ^(插入符号)字符对其进行转义。要输入文字插入符号,请连续使用两个插入符号。

相关内容