用sed替换特殊文本?

use*_*822 3 sed command-line


我在 Windows Xp 上使用 CMD 用 Sed 替换特殊文本。我正在使用此命令替换特殊字符,例如$ or *

sed -i "s/\*/123/g;" 1.txt
Run Code Online (Sandbox Code Playgroud)

但是我必须如何使用命令来替换ciao!我的文本文件中的这些字符串?有可能吗?

\\
\\\
""
sed.exe -i "s/{\*)(//123/
sed -i "s/\\/123/g;" 1.txt
Run Code Online (Sandbox Code Playgroud)

前一个命令不工作,因为我有\"那sed的使用,使正则表达式等特殊字符串。

Pet*_*r.O 5

当搜索字符串包含特殊字符时,使用正则表达式查找文字字符串有时不像查找模式那么简单,但您可以通过一些杂耍来完成。

注意:该echo命令必须满足 CMD 特殊字符,因此它需要^^转义单个^^|转义|...^如果直接键入文件,则不需要 CMD 的转义字符。


步骤 1:创建一个名为literal-srch-strings.txt的文件,其中包含要替换的确切(未更改)字符串。有两种方法可以创建此文件:

  1. 作为在 CMD 的commandline发出的命令,或作为 .cmd/.bat command-script 中的命令

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

  2. 在文本编辑器中自己制作 literal-srch-strings.txt
    在这种情况下,您不应该使用 CMD-escape-character ^,因此该行只有一个^,而不是^^- 这是因为您绕过了 CMD-shell。
    这是 .txt 文件中需要的内容(正如文件名所说:)

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


第 2 步:制作一个名为str-to-regex.sedsed 脚本, 将字符串转换为 sed regex(s)。 请注意,CMD-escape-character 的相同问题也适用于此步骤,因此,您可以通过两种方式创建 .sed 文件:
^

  1. 作为命令:

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

  2. 使用您的文本编辑器,创建一个名为str-to-regex.sed的文件,其中包含:

    s/[]\/$*.^|[]/\\&/g; s/.*/s\/&\/Ciao!\/g/


第3步:运行的sed脚本其中的字符串转换成一个sed regeular表达,
它的输出发送到另一个的sed脚本,替换通text.sed,这将使实际更换。

sed -f str-to-regex.sed  literal-srch-strings.txt > replace-text.sed
Run Code Online (Sandbox Code Playgroud)

第 4 步:运行replace-text.sed -- 对于测试,我们可以使用literal-srch-strings.txt作为输入文件,当然您也可以使用任何输入文件。

sed -f replace-text.sed  literal-srch-strings.txt
Run Code Online (Sandbox Code Playgroud)

这是输出:

Ciao! 
Run Code Online (Sandbox Code Playgroud)