Как вставить разрыв строки после определенной строки? - PullRequest
1 голос
/ 25 апреля 2019

У меня есть файл со следующим текстом, я хочу сделать разрыв строки после символа S.

У меня есть это

1900-01-01 00:00:00|1|S|S|S|S.1900-01-01|S.1900-01-01 00:00:00|1|S|S|S|S.1900-01-01 00:00:00|1|S|S|S|S.

я хочу

1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

я попробовал это

$ sed 's/S./\n/g' file.csv > file2.csv

Ответы [ 3 ]

3 голосов
/ 25 апреля 2019

С любым sed, который принимает \n в значении "перевод строки":

$ sed 's/S\./&\n/g' file
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

или в bash для $'\n', чтобы получить символ новой строки:

$ sed 's/S\./&\'$'\n''/g' file
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

или с любым седом в любой оболочке:

$ sed 's/S\./&\
/g' file
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.

Обратите внимание, что вывод будет заканчиваться пустой строкой, поскольку скрипт добавляет новую строку после каждые S. в соответствии с запросом. Если вы хотите добавить новую строку после каждой средней строки S., тогда это будет:

$ sed 's/\(S\.\)\(.\)/\1\n\2/g' file
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01|S.
1900-01-01 00:00:00|1|S|S|S|S.
1900-01-01 00:00:00|1|S|S|S|S.
1 голос
/ 27 апреля 2019

Когда каждая строка в файле имеет комбинацию S., вы можете использовать не жадный шаблон

grep -oP ".*?S[.]" file

Если у вас могут быть разные строки, вам нужно добавить альтернативу

grep -oP ".*?S[.]|.*" file
0 голосов
/ 25 апреля 2019

если данные в d файле, попробуйте на GNU SED:

sed -E 's/S\./&\n/g' d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...