У меня есть файл, который должен иметь "OK" в конце определенной строки
строка, которая должна быть изменена, является первой строкой, не заканчивающейся "OK"
Я могу grep файл, чтобы заставить строку быть измененной с помощью следующего кода
grep -vnm 1 OK '/content2'
я нуждаюсь в помощи в, добавляет шаблон хорошо в конец этой строки
Пример:
если содержание файла имеет следующие строки
aaaaaaaaaaaaaa OK
bbbbbbbbbbbbbb OK
cccccccccccccc
dddddddddddddd
eeeeeeeeeeeeee OK
я должен добавить хорошо к строке, содержит cccccccccccc
только
Вы могли использовать следующее awk
программа:
awk -v s=" OK" '/OK$/ { print; } !/OK$/ { print $0 s; s=""; }'
Это работает как это:
/OK$/ { print; }
распечатывает любую строку, заканчивающуюся в OK
как, тогда как
!/OK$/ { print $0 s; s=""; }
распечатывает любую строку, не заканчивающуюся в OK
со значением переменной s
добавленный.
Переменная s
первоначально строка ' OK'
. Это изменяется на пустую строку после первого обнаружения строки, не заканчивающейся в OK
.
Обновление
Еще более кратко:
awk -v s=" OK" '!/OK$/ { print $0 s; s=""; } /OK$/'
устраняет { print; }
действие для /OK$/
условие, как { print; }
действие по умолчанию.
Исправление
Смотря на вопрос снова, это не говорит OK
должен быть добавлен к первой строке, не имеющей OK
, но вместо этого к первой строке, не имеющей OK
который следует за строкой, которая действительно имеет OK
. Так, мы должны сохранить переменную, c
это отмечает это по крайней мере один OK
строка была замечена, и переменная d
это отмечает это, мы сделаны:
awk ' /OK$/ { if (!d) c=1; }
!/OK$/ { if (c) d=1; }
c && d { s=" OK"; c=0; }
{ print $0 s; s=""; }'
sed -ri 's/.*cccccccccccccc */cccccccccccccc OK/g' filename
, где filename
название Вашего входного имени файла.