Как удалить символ новой строки из строк, предшествующих определенному шаблону?

У меня есть файл следующего вида:

1
22
1
4
$3
3
5556
$33
$233
$1
5

Я хочу переместить все строки, начинающиеся с $, на предыдущую строку, заменив символы новой строки пробелом. Мой результат должен выглядеть примерно так:

1
22
1
4 $3
3
5556 $33 $233 $1
5

Как я могу сделать это с помощью sed, grep или awk?

0
01.12.2016, 12:44
4 ответа

Попробуйте следующее:

awk 'BEGIN {ORS = ""} {print}' файл | sed 's / \ (\) \ ([0-9] \) / \ n \ 2 / g'

awk изменяет столбец на строку, устанавливая разделитель выходных полей на пробел, а sed находит шаблон пробел + число и заменяет его шаблоном новой строки + число .

0
28.01.2020, 02:34
$ vi file
:g/^\$/-1j
:x

Т.е. выполните однострочное : присоединитесь к в строках, предшествующих строкам со знаком доллара, затем сохраните и выйдите.

0
28.01.2020, 02:34

Похожий вопрос размещен здесь: Команда SED для форматирования текстового файла

Как следует из комментария Стефана, решение вашего вопроса с помощью sed будет следующим:

sed -e :a -e '$!N;s/\n\$/ $/;ta' -e 'P;D' filename
3
28.01.2020, 02:34

Это очень просто, нужно:

  1. преобразовать текст в шестнадцатеричный
  2. замените 0a24 (перевод строки и $ )на 2024 (пробел и $)
  3. конвертировать обратно в текст

В этом -вкладыше файл называется "file":

# xxd -ps file|tr -d "\n"|sed s/0a24/2024/g|xxd -r -ps
1
22
1
4 $3
3
5556 $33 $233 $1
5
1
21.08.2020, 13:19

Теги

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