Почему sed не может правильно интерпретировать эту многострочную строку шаблона?

Вам необходимо установить пакет java-1.8.0-openjdk-devel.

0
18.01.2020, 15:19
1 ответ

Используя двойные кавычки вокруг строки выражения sed, вы можете использовать продолжение обычной строки -, чтобы разбить ее на несколько строк:

expression="/([12][[:digit:]]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][[:digit:]]|3[01]) \
[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2},[[:digit:]]{3} INFO)/d"

После \в конце первой строки не должно быть ничего, кроме новой строки, а вторая строка не должна начинаться с каких-либо дополнительных символов. Я переместил пробел в строке до первой строки, чтобы он выглядел преднамеренно, а не как случайный отступ.

Кроме того, вы можете использовать конкатенацию двух одинарных -строк в кавычках:

expression='/([12][[:digit:]]{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][[:digit:]]|3[01]) '\
'[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2},[[:digit:]]{3} INFO)/d'

Это присвоит переменной expressionодну строковую строку.

Затем вы должны использовать это как

sed -E -e "$expression"

Здесь я использую -Eвместо -r, так как -Eчаще поддерживается (для включения расширенных регулярных выражений вsed)и использования -e, чтобы сообщить sed, что следующий аргумент — это выражение sed, применяемое к входным данным. Само выражение sedдолжно быть заключено в двойные кавычки, так как мы не хотим, чтобы оболочка выполняла разбиение слов и подстановку имени файла для его значения.

5
28.01.2020, 02:15

Теги

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