2014-01-28 2 views
1

у меня есть это содержимое в файл:Regex: Соответствие несколько пробелов не работает

core  = 7.x 
    base theme = adaptivetheme 
    release  = 7.x-3.x 
    engine  = phptemplate 

Я Tring, чтобы получить все после: base theme = до конца строки, так что я хотел бы получить adaptivetheme.

на основе https://unix.stackexchange.com/a/24151/37309 я пытаюсь сделать:

sed -n 's/base\stheme\s+=\s//p' file 
sed -n 's/base\stheme += //p' file 

Но это не работает. Однако это действительно работает:

sed -n 's/base\stheme = //p' file 

Так что я делаю неправильно? Я хотел бы сопоставить его независимо от количества пробелов, которые могут быть.

ответ

2

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

sed -n 's/base theme \+= //p' file 

Это говорит "один или несколько пробелов" (это значение сбежавший \+).

Сам по себе sed использует только основное регулярное выражение (BRE). Если вы хотите использовать extended regex, некоторые правила меняются - как будто символы должны быть экранированы или нет. Вы можете вызвать расширенный режим с помощью флага -r. Затем + больше не нужно экранировать.

Эти диалекты регулярного выражения очень сбивают с толку. Мне тоже нужно искать это тоже ...

2

Используйте -r -flag для расширенного регулярного выражения-поддержки:

sed -r 's/base\stheme\s+=\s//' 

enter image description here

+0

Ваше предлагаемое решение распечатает другие строки в файле без изменений. Вам нужен флаг '-n' для подавления вывода, а' p' в конце команды для печати строк, где найдено совпадение. – Floris

Смежные вопросы