Как заменить следующую запись после сопоставления шаблона с помощью awk

Это первый этап создания цепочки инструментов, поэтому ваша среда сильно зависит от ОС вашего хоста.

В главе 2.2 Требования к хост-системе есть два сценария:

  • version-check.sh - который печатает версии всех пакетов, важных для lfs
  • library-check.sh - для проверки наличия библиотек gmp, mpfr и mpc

Вы запускали обе и сравнивали результаты с версиями, указанными в книге?

Из-за ошибки, которую вы получаете:

Эти важные программы отсутствуют или слишком старые: gawk

настолько прост, насколько он есть - ваша ОС хоста имеет слишком старый gawk .

РЕДАКТИРОВАТЬ: Спасибо за обновление. Итак, версия gawk в ОС вашего хоста в порядке. Но проблема по-прежнему заключается в вашей хост-ОС - по какой-то странной причине некоторые пакеты недоступны для обычного (lfs) пользователя, поэтому ваша хост-ОС не соответствует системным требованиям. На стороне lfs исправлять нечего. Вам нужно исправить операционную систему хоста, возможно, переустановить эти пакеты?

1
28.05.2016, 04:23
2 ответа
$ awk '/blah/ {print $0 "\n" "replacement"; getline; next} 1' file

Если текущая строка соответствует blah, то распечатайте ее, напечатайте replacementна новой строке, получите следующую строку вывода (, которую мы уже заменили на «замену» )и ничего не делаем с ним , а затем пропустите оставшееся правило. «Остальное правило» (, которое применяется только к строкам, которые не соответствуют blahи не следуют за строкой, соответствующей бла-бла ), состоит в том, чтобы просто напечатать строку.

0
23.05.2020, 06:02

Использование GNU sedвместоawk:

sed -e '/blah/{ n; c\' -e 'replacement' -e '}' file

Ищет строки, соответствующие шаблону blah. Когда такая строка найдена, она печатается с n, которая также немедленно считывает следующую строку ввода. Эта следующая строка затем изменяется с помощью cна замещающий текст. Текст замены печатается в конце цикла.

Аннотированный sedсценарий:

/blah/ {    ;# this is a "blah" line
    n       ;# output line and read next line
             # change the line just read
    c\
replacement
}
             # (implicitly print all lines)

Этот скрипт sedтакже будет работать с sedкак в OpenBSD, так и в NetBSD, даже несмотря на то, что одна строка -вверху не работает с этими реализациями из-за того, что они неправильно работают с командой c., похоже на то.

1
23.05.2020, 06:44

Теги

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