我有多个包含以下文本的文件:
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' 以避免自动打印。