как добавить \ n до 4-го канала и после последних двойных кавычек в файле в Unix - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть строка в файле. как:

  • 1 | 4 | ab | "abnchf" dnvjnkjf "fdvjnfkjnv" 2 | 12 | df | "dskfnkfv" A "

Я хочу разбить на две строки, добавив \ n до 4-го канала и после последних двойных кавычек.

должно быть как:

  • 1 | 4 | ab | "abnchf" dnvjnkjf "fdvjnfkjnv"

    2 | 12 | df | "dskfnkfv" A "

я пробовал команду sed, но она не работает

sed 's/\(|[^|]*\)(|[^|]*\)(|[^|]*\)|/\1\n|/g' 

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Это может сработать для вас (GNU sed):

sed 's/[^ |]*|/\n&/4' file

Вставить новую строку перед четвертым полем, разделенным |.

0 голосов
/ 12 сентября 2018

Вы можете использовать

sed 's/\([^|]*|\)\{3\}[^|]* /&\n/' file > newfile

См. онлайн демо

Детали

  • \([^|]*|\)\{3\} - три последовательных вхождения
    • [^|]* - 0+ символов кроме |
    • | - символ трубы
  • [^|]* - 0+ символов кроме |
  • - пробел

Шаблон замены: &\n, полное совпадение (&) и символ новой строки (\n).

Замена выполняется только один раз в строке, так как я удалил опцию g.

Во избежание переэкрана, вы можете использовать POSIX ERE на основе sed:

sed -E 's/([^|]*\|){3}[^|]* /&\n/' file > newfile

, где вам не нужно избегать захвата скобок и скобок квантификатора диапазона / интервала (но вы должны избегать буквального | символа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...