2013-11-25 8 views
0

для строкиBash строка Regex заменить "*"

s='abc_somedef' 

использовать регулярное выражение замены (он работает)

echo ${s//_some/} 

Использование регулярных выражений заменить .* (она не работает)

echo ${s//^.*_some/} 

Я хочу, чтобы результат был def

как я пишу его с bash внутри (не sed/awk)? может быть, какой-то побег?

+0

Возможно использование не жадной версии '*': '/^.*?_ some /'? – mc10

+0

Нет, это тоже не работает. См. Мой ответ ниже. – Chandranshu

ответ

1

Используйте это:

echo ${s//*_some/} 

Ваша версия не совпадает с так как он пытается соответствовать точка буквально.

UPDATE:

Chepner правильно объяснено ниже, что * здесь не является частью регулярного выражения вообще. Он просто используется в качестве гвоздящего персонажа.

+3

Вы могли бы сделать этот 30 символов длинным _explaining_, почему версия OPs не работает. – devnull

+0

Правильная идея. Позвольте мне уточнить ответ. – Chandranshu

+0

«В отличие от регулярных выражений на большинстве языков ...»: не верно. Расширение параметра не использует * регулярные выражения; он использует сопоставление шаблонов. Где 'bash' использует регулярные выражения (после оператора' = ~ '),' .' имеет стандартное значение «любой отдельный символ». – chepner

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