Если Вы знаете, что это поле начинается \n
во всех записях можно использовать sed
следующим образом:
sed "N;s/|\n/|/"
избавиться от новой строки. Отметьте, это с тех пор sed
использование \n
как разделители строки, сначала необходимо соединить следующую строку с обработанной той ( N
команда), во время этого процесса sed
вставляет символ новой строки между строками, к которым присоединяются.
Если эта проблема возникает случайным образом (не в каждом записи), необходимо будет обратиться к более сильному инструменту для парсинга содержания файла - в основном необходимо считать поля. Также awk
или perl
может добиться цели изящно (я думаю, что это могло быть выполнено в sed
а также, но Вы, вероятно, не хотите, идут то направление).
Можно использовать много инструментов, но sed
был создан для точно этих видов ситуаций:
sed -i 's,\\n,,g' Flatfile
Чтобы показать Вам, как это работает, вот, то же выражение с входом, который Вы обеспечили просто отраженный:
$ echo '-000123456|1654321|6/12/2002 8:49:20 AM|\n tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|' | sed 's,\\n,,g'
-000123456|1654321|6/12/2002 8:49:20 AM| tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|
Это просто ищет строку \n
и замены это с пустой, строкой нулевой длины (эффективно удаляющий его). Существуют два \
, так \n
теряет его специальное предложение (символ новой строки) значение и может быть подобран как два символа.
echo
не распознает \n
если Вы не используете echo -e
. Во-вторых, sed
не распознает новые строки также, если Вы не добавляете их к пространству шаблона как в другом ответе.
– Steven Penny
04.06.2014, 07:37
sed
много достаточно сильное для обработки этого -sed
только так же сильно как его сценарий. ИзучитеP;D;H;h;x;l
команды конкретно. Можно легко включить поляsed
также как:s/field_delimiter/replace/3
– mikeserv 04.06.2014, 08:21