如何搜索和替换带有“/”的文本文件

如何搜索和替换带有“/”的文本文件

我有一个文本文件./.,需要用 替换它0|0

该文件太大,无法在 Gedit 中打开并手动执行。

我可以使用 来做到这一点sed吗?

答案1

是的。在这种情况下,选择不同的分隔符(如)很有用_,这样您就不必转义斜线:

sed 's_\./\._0|0_'

例子:

$ cat test
./.
$ sed 's_\./\._0|0_' test
0|0

添加

  • -i就地更改文件,而不是将输出打印到标准输出,
  • -i.b这样做并保存备份.b作为扩展名和
  • g到表达式的末尾来更改每行的多个出现次数,而不仅仅是第一个出现次数 (→ 's_\./\._0|0_g')。

解释

  • s/A/B/– 替换AB、与相同s_A_B_ssAsBs您能想到的任何内容:

    可以使用反斜杠或换行符以外的任何字符代替斜杠来分隔 BRE 和替换。[来源]

  • s/A/B/g– 替换A并本地B执行g,因此在第一次找到之后不要停止执行(每行!)

  • \./\.– 文字字符串./.,点需要用反斜杠进行转义,因为它们是基本正则表达式否则将采用任意字符,匹配a/a, a/b///等等
  • 0|0– 文字字符串0|0

答案2

是的,你可以用 sed 来做到这一点。
你需要用 来转义.和。/\

sed -i.bak 's/\.\/\./0|0/g' file

-i.bak将使 sed 就地编辑文件,但会创建一个扩展名为 .bak 的备份文件。末尾的表示“全局” --> 替换所有出现的内容
g

答案3

即使您要求sed命令来满足您的要求,您也可以尝试ex命令。

ex -sc '%s/\.\/\./0|0/g|x' file

%选择所有行

s替代

g全局替换所有实例

x写入是否做出更改并退出

例子:-

$cp file file.bak
$cat file
./.
$ex -sc '%s/\.\/\./0|0/g|x' file
$cat file
0|0

相关内容