我在 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的使用,使正则表达式等特殊字符串。
当搜索字符串包含特殊字符时,使用正则表达式查找文字字符串有时不像查找模式那么简单,但您可以通过一些杂耍来完成。
注意:该echo
命令必须满足 CMD 特殊字符,因此它需要^^
转义单个^
和^|
转义|
...^
如果直接键入文件,则不需要 CMD 的转义字符。
步骤 1:创建一个名为literal-srch-strings.txt的文件,其中包含要替换的确切(未更改)字符串。有两种方法可以创建此文件:
作为在 CMD 的commandline发出的命令,或作为 .cmd/.bat command-script 中的命令。
echo sed -i^^/\\*$/$[{" ;"> literal-srch-strings.txt
在文本编辑器中自己制作 literal-srch-strings.txt。
在这种情况下,您不应该使用 CMD-escape-character ^
,因此该行只有一个^
,而不是^^
- 这是因为您绕过了 CMD-shell。
这是 .txt 文件中需要的内容(正如文件名所说:)
sed -i^/\\*$/$[{" ;"
第 2 步:制作一个名为str-to-regex.sed的sed 脚本, 将字符串转换为 sed regex(s)。
请注意,CMD-escape-character 的相同问题也适用于此步骤,因此,您可以通过两种方式创建 .sed 文件: ^
作为命令:
echo s/[]\/$*.^^^|[]/\\^&/g; s/.*/s\/^&\/Ciao!\/g/> str-to-regex.sed
使用您的文本编辑器,创建一个名为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)