Intereting Posts
Шифровать слово X для шифрования / etc / shadow Невозможно установить 32-битный gstreamer-ffmpeg, библиотека не может найти другие 32-разрядные библиотеки IPSec через L2TP: не удалось получить ключ для предварительного общего ключа Как удалить все строки, которые имеют одно значение в строке? Обои для рабочего стола в XFCE4 Как создать rootfs для пользовательского режима Linux на Fedora 18? Проверка семантической целостности файловой системы Предоставьте предупреждение, когда что-то будет удалено (от root) Как rsync chroot без нарушения символических ссылок? virt-manager копировать и вставлять, можно отключить его? Не удалось согласовать алгоритм ssh Как я могу использовать netcat (nc) для модели клиентского сервера чата? Обнаружение гнезда звука (динамика) с debian В XFCE, как увеличить чувствительность границ окна для изменения размера? Клонированные системы + сетевые интерфейсы

Чтобы удалить новые строки после пустой строки

Данные

4. Alendronic acid A. Antiosteoporotic agent. B. Inhibit osteoclast formation and function by inhibiting FPPS enzyme, so increase bone mass. C. Osteoporosis in combination with vitamin D. 5. Aminophylline A. Methylxanthine. Less potent and shorter-acting bronchodilator than Theophylline. B. Phosphodiesterase (PDE) inhibitor, so increase cAMP so affecting calcium so relaxes respiratory SM and dilates bronchi/bronchioles. C. Last option of asthma attack, COPD, Reversible airways obstruction. 

который я хочу быть (и позже без пустой строки, как описано ниже в псевдокоде)

 4. Alendronic acid A. Antiosteoporotic agent. B. Inhibit osteoclast formation and function by inhibiting FPPS enzyme, so increase bone mass. C. Osteoporosis in combination with vitamin D. 5. Aminophylline A. Methylxanthine. Less potent and shorter-acting bronchodilator than Theophylline. B. Phosphodiesterase (PDE) inhibitor, so increase cAMP so affecting calcium so relaxes respiratory SM and dilates bronchi/bronchioles. C. Last option of asthma attack, COPD, Reversible airways obstruction. 

Моя попытка была первоначально основана на идее удаления всех пустых строк с помощью gsed -n "s/^$//;t;p;" но это невозможно сейчас.

ПСЕВДОКОД

  • удалите все строки новой строки (не пустые строки) по tr '\n' ' ' (все теперь один лайнер, но проблема, так как принимает также пустые строки!)
  • замените все A. на \ nA. by sed 's#A.#\nA.#'
  • удалите все пустые строки с помощью gsed -n "s/^$//;t;p;"

Псевдокод в целом

 cat \ 10.6.2015.tex \ \ | tr '\n' ' ' \ \ | sed 's#A.#\nA.#' \ \ | gsed -n "s/^$//;t;p;" \ \ > 10.6.2015_quizlet.tex 

что, однако, неверно из-за логической ошибки в первой строке.

Как удалить новые строки после пустой строки в Perl / Sed / tr?

Я бы использовал perl или awk для чтения данных по абзацу за раз и удалил все, кроме первой новой строки:

 perl -00 -pe '$\="\n\n"; s/\n/\0/; s/\n//g; s/\0/\n/' file 

комментарии

 perl -00 -pe ' # each record is separated by blank lines (-00) # read the file a record at a time and auto-print (-p) $\="\n\n"; # auto-append 2 newlines to each record s/\n/\0/; # turn the first newline into a null byte s/\n//g; # remove all other newlines s/\0/\n/ # restore the first newline ' file 

по аналогии

 awk -v RS= -F'\n' '{print $1; for (i=2; i<=NF; i++) printf "%s", $i; print ""; print ""}' file 

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

 sed '/[0-9]\./{n;:l;N;/\n$/!s/\n/ /;tl}' file 

Это приведет к выводу:

 4. Alendronic acid A. Antiosteoporotic agent. B. Inhibit osteoclast formation and function by inhibiting FPPS enzyme, so increase bone mass. C. Osteoporosis in combination with vitamin D. 5. Aminophylline A. Methylxanthine. Less potent and shorter-acting bronchodilator than Theophylline. B. Phosphodiesterase (PDE) inhibitor, so increase cAMP so affecting calcium so relaxes respiratory SM and dilates bronchi/bronchioles. C. Last option of asthma attack, COPD, Reversible airways obstruction. 

объяснение

Мы сопоставляем строку с номером и периодом с /[ /[0-9]\./ . Затем вводим кодовый блок, который переходит к следующей строке с n . Он запускает цикл с :l , который добавляет следующую строку с N и заменяет новую строку пробелом с s/\n/ / . Цикл завершается, когда он достигает пустой строки, которая подхватывается условием /\n$/! ,

Вот решение awk которое решает проблему с помощью соответствующих определений того, что является полевым и разделителем записей для ввода и вывода; поэтому эффективная команда ( $1=$1 FS ) довольно проста:

 awk ' BEGIN { RS="" ; FS="\n" ; OFS="" ; ORS="\n\n" } $1=$1 FS ' 

Объяснение:

RS="" – обрабатывает блоки с пустой строкой, разделенные данными как одну запись

FS="\n" – определяет каждую строку блока как собственное адресное поле

OFS="" – из-за данных с пустым завершением не требуется разделитель полей вывода

ORS="\n\n" – для разделения новых блоков (как входных данных) на пустую строку

$1=$1 FS – первое поле (т.е. первая строка) будет отделено от остальных строк в блоке символом новой строки; поскольку это присвоение является истинным условием в awk будет напечатана модифицированная запись (блок)

 sed -n '/^[0-9]/!H;//x;$x;s/\n\([^A]\)/ \1/gp' <infile >outfile 

Кажется, делает трюк:

  1. /^[0-9]/!H
    • Если линия делает ! не начинайте с цифры, а затем добавьте ее в H старое пространство после \n ewline.
  2. //x;$x
    • Если это начинается с цифры и / или если это последняя строка, e x change pattern и h old spaces.
  3. s/\n\([^A]\)/ \1/gp
    • Если в паттерн-пространстве можно найти 1 или более последовательностей \n ewline, за которыми следует любой символ не- A , то g lobally s/// ubstitute \n ewlines в этих последовательностях для <space> и p rint результаты.
    • Единственный раз, когда \n ewline будет найден, сразу после изменения e x – так что только в строках, начинающихся с цифры или последней строки.
    • Ведущая цифра получает свой \n ewline, потому что разделительная линия является последним символом в пространстве шаблонов при изменении e x – и поэтому для этого не существует символа \([^A]\) , и поэтому он не получить s/// замещенную для пробела.

И это все.

ВЫВОД:

 4. Alendronic acid A. Antiosteoporotic agent. B. Inhibit osteoclast formation and function by inhibiting FPPS enzyme, so increase bone mass. C. Osteoporosis in combination with vitamin D. 5. Aminophylline A. Methylxanthine. Less potent and shorter-acting bronchodilator than Theophylline. B. Phosphodiesterase (PDE) inhibitor, so increase cAMP so affecting calcium so relaxes respiratory SM and dilates bronchi/bronchioles. C. Last option of asthma attack, COPD, Reversible airways obstruction.