sed 用换行符 Linux 替换 '\\'

188*_*885 6 linux sed text-processing

我有多个带有以下文本的文件:

20~02~19~05-01-52
2249\\\2249\\\2249\\\2249\\\2249\\\2249\\\2248\\\
Run Code Online (Sandbox Code Playgroud)

我想使用 sed 或其他 Linux 命令来替换\\\换行符。

Qua*_*odo 13

sed 's|\\\\\\|\n|g' filename这样做,如果您使用的是 GNU sed。

如果你想要 POSIX sed,那么这应该可以工作(相当多的转义!):

sed 's|\\\\\\|\
|g' filename
Run Code Online (Sandbox Code Playgroud)


ter*_*don 8

我会在这里使用 Perl,因为它具有更高级的正则表达式,可以轻松支持重复。所以,像这样:

$ perl -pe 's/\\{3}/\n/g' file 
20~02~19~05-01-52
2249
2249
2249
2249
2249
2249
2248
Run Code Online (Sandbox Code Playgroud)

的-pe手段“施加由-e赋予它的脚本后打印每个输入线”。脚本本身只是用\换行符替换了每次出现的 3 次。我们需要\\而不是\因为\需要转义。

如果您sed支持它(GNU sed 支持),您可以使用相同的方法:

$ sed -E 's/\\{3}/\n/g' file 
20~02~19~05-01-52
2249
2249
2249
2249
2249
2249
2248
Run Code Online (Sandbox Code Playgroud)