Как я могу добавить новую строку в большой файл каждые n символов в терминале (один вкладыш sed)? - PullRequest
4 голосов
/ 02 марта 2012

Что мне здесь не хватает?

file.txt:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

в терминале:

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

результат: new-file.txt

ABCnDEFnGHInJKLnMNOnPQRnSTUnVWXnYZ

Ожидаемый результат:

ABC
DEF
...
VWX
YZ

Ответы [ 6 ]

6 голосов
/ 02 марта 2012

Использование sed:

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

Или используйте grep:

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

результат:

ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ
4 голосов
/ 06 марта 2012
$ echo abcdefghi | dd cbs=3 conv=unblock 2>/dev/null 
abc
def
ghi
2 голосов
/ 02 марта 2012

Просто с bash:

while read -n 3 chars; do printf "%s\n" "$chars"; done < file.txt > new-file.txt
1 голос
/ 02 марта 2012

Один из способов сделать это - нажать клавишу Enter при вводе команды sed:

$ sed 's/.\{3\}/&\ 
/g' < file.txt > new-file.txt
$ cat new-file.txt
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ
0 голосов
/ 19 ноября 2015

Опция, хотя, возможно, не совсем корректная в зависимости от вашего входного файла, - это gnu coreutil fold.Это обернет строки так, что ни одна строка не будет длиннее w символов, например:

$ <<< 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' fold -w3
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ
0 голосов
/ 02 марта 2012

Для меня сработало следующее:

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

Все еще не уверен, почему оригинал не работал.

Спасибо за вашу помощь.

...