如何在终端中每n个字符(一个衬里sed)中为一个大文件添加一个新行?

时间:2012-03-02 09:57:18

标签: bash shell text sed replace

我在这里缺少什么?

file.txt的:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
终端

> sed "s/.\{3\}/&\n/g" < file.txt > new-file.txt

结果:new-file.txt

ABCnDEFnGHInJKLnMNOnPQRnSTUnVWXnYZ

预期结果:

ABC
DEF
...
VWX
YZ

6 个答案:

答案 0 :(得分:6)

使用sed

$ sed 's/.../&\n/g' file.txt

或使用grep

$ grep -oE '.{1,3}' file.txt

结果:

ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ

答案 1 :(得分:4)

$ echo abcdefghi | dd cbs=3 conv=unblock 2>/dev/null 
abc
def
ghi

答案 2 :(得分:2)

只是使用bash:

while read -n 3 chars; do printf "%s\n" "$chars"; done < file.txt > new-file.txt

答案 3 :(得分:1)

执行此操作的一种方法是在键入sed命令时显式单击 Enter 键:

$ sed 's/.\{3\}/&\ 
/g' < file.txt > new-file.txt
$ cat new-file.txt
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ

答案 4 :(得分:0)

以下结果为我工作:

perl -0777 -pe 's/(.{3})/\1\n/sg' < file.txt > new-file.txt

仍然不确定为什么原版不起作用。

感谢您的帮助。

答案 5 :(得分:0)

一个选项,虽然可能不完全正确,具体取决于你的输入文件是gnu coreutil fold。这将包装行,使得没有行长度超过w个字符,例如:

$ <<< 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' fold -w3
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ