удалить перевод строки между двумя строками с помощью команды sed в оболочке Unix - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть файл (test.dat), который содержит данные, подобные этим

459|199811047|a |b |shan
kar|ooty|
460|199811047|a |b |guru|cbe|

но мне это нужно как:

459|199811047|a |b |shankar|ooty|
460|199811047|a |b |guru|cbe|

При чтении данных из этого файла я не хочу удалять символ новой строки в конце каждой записи. Я просто хочу удалить \ n между двумя строками ( вроде: shankar ) внутри символа трубы.

фактически внутри файла unix my dat ... состоит из 500 символов ... поэтому первые 300 символов появляются в первой строке и получают разрыв (новую строку) для следующих 200 символов ... но эти 500 следует рассматривать как одна строка .. поэтому я пытаюсь добавить символы, которые получили разрыв из-за новой строки.

Ответы [ 4 ]

1 голос
/ 21 февраля 2011

Вдохновлен Как заменить символ новой строки (\ n) с помощью sed?

sed ':a;N;/|$/!ba;s/\n//g'

Объяснение (за отличие от вдохновения):

  1. Если мы встречаем строку, которая не заканчивается на '|', переход к созданному регистру /|$/!ba
1 голос
/ 21 февраля 2011

Не совсем понятно, каковы критерии объединения двух линий. Тем не менее, это, вероятно, поможет добиться успеха с указанными данными:

sed -e '/|shan$/N;s/|shan\nkar|/|shankar|/' test.dat

Протестировано с sed на MacOS X 10.6.6.

Если критерий «если строка не заканчивается трубой, соедините ее следующей строкой», то это работает:

sed -e '/[^|]$/{N;s/\n//;}' test.dat

Поиск говорит «если строка не заканчивается трубой»; '{' запускает группу операций; N объединяет следующую строку с новой строкой между ними; s/\n// удаляет перевод строки; '}' завершает группу операций.

0 голосов
/ 21 февраля 2011

Немного другой подход:

sed '/^.\{300\}$/{N;s/\n//}' inputfile

Если строка состоит ровно из 300 символов, добавьте следующую строку.

0 голосов
/ 21 февраля 2011
awk 'ORS=/^[0-9]/?"\0":"\n"' file

ruby -ne 'print /^\d+/?"#{$_.chomp}":"#{$_}";' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...