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

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

我有多个包含以下文本的文件:

20~02~19~05-01-52
2249\\\2249\\\2249\\\2249\\\2249\\\2249\\\2248\\\

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

答案1

sed 's|\\\\\\|\n|g' filename如果您使用的是 GNU 的话,就可以做到sed

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

sed 's|\\\\\\|\
|g' filename

答案2

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

$ perl -pe 's/\\{3}/\n/g' file 
20~02~19~05-01-52
2249
2249
2249
2249
2249
2249
2248

意思-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

答案3

awk

awk '{gsub(/\\{3}/, RS)}1' file

答案4

使用 sed: sed -n 's/\\\\\\/\n/g; p' filename.txt.

分号后面有“p”很重要,否则它不会打印没有发生替换的第一行。 6 个反斜杠,因为 3 个反斜杠用作您拥有的 3 个反斜杠的转义字符。 “g”代表全球。 '-n' 以避免自动打印。

相关内容