Получение Источника как Плоский файл и удалить Возвраты каретки и \n … специальные символы?

finddup этот инструмент может также помочь Вам в списке файлов с теми же именами или содержанием..

3
27.11.2012, 01:32
3 ответа

Если Вы знаете, что это поле начинается \n во всех записях можно использовать sed следующим образом:

sed "N;s/|\n/|/"

избавиться от новой строки. Отметьте, это с тех пор sed использование \n как разделители строки, сначала необходимо соединить следующую строку с обработанной той ( N команда), во время этого процесса sed вставляет символ новой строки между строками, к которым присоединяются.

Если эта проблема возникает случайным образом (не в каждом записи), необходимо будет обратиться к более сильному инструменту для парсинга содержания файла - в основном необходимо считать поля. Также awk или perl может добиться цели изящно (я думаю, что это могло быть выполнено в sed а также, но Вы, вероятно, не хотите, идут то направление).

2
27.01.2020, 21:45
  • 1
    Это только работает на любую строку - и sed много достаточно сильное для обработки этого - sed только так же сильно как его сценарий. Изучите P;D;H;h;x;l команды конкретно. Можно легко включить поля sed также как: s/field_delimiter/replace/3 –  mikeserv 04.06.2014, 08:21
  • 2
    Это, как предполагается, работает как этот - и это точно, в чем нуждается OP. –  peterph 04.06.2014, 13:36

Можно использовать много инструментов, но 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 теряет его специальное предложение (символ новой строки) значение и может быть подобран как два символа.

-2
27.01.2020, 21:45
  • 1
    Это не правильно. В первую очередь, echoне распознает \n если Вы не используете echo -e. Во-вторых, sedне распознает новые строки также, если Вы не добавляете их к пространству шаблона как в другом ответе. –  Steven Penny 04.06.2014, 07:37
  • 2
    , вопрос отличался, когда сначала спрошенный, вот почему ответ теперь вне синхронизации и кажется неправильным. Я предполагаю, что должен обновить его. –  lynxlynxlynx 19.06.2014, 00:50

Результат

0
27.01.2020, 21:45

Теги

Похожие вопросы