2015-11-22 1 views
0

У меня есть строка, я пытаюсь манипулировать с SEDИспользование СЭД для замены строки соответствия регулярных выражений с групповыми символами

js/plex.js?hash=f1c2b98&version=2.4.23" 

Желаемая выходе

js/plex.js" 

Это то, что я в настоящее время пытается

sed -i s'/js\/plex.js[\?.\+\"]/js\/plex.js"/' 

Но это только соответствие первым? и возвращает этот выход

js/plex.js"hash=f1c2b98&version=2.4.23" 

Я не могу понять, почему это не работает после нескольких часов

+0

Try [ 'эхо 'JS/plex.js хэш = f1c2b98 и версия = 2.4.23 \"?' | sed s/[?] [^ \ "] * // g'] (http://ideone.com/DF7RN2) –

ответ

1

Это работает

echo 'js/plex.js?hash=f1c2b98&version=2.4.23"' | sed s:.js?.*:.js:g 

С оригинальным Regex:

Во-первых, я предложит использовать другой разделитель (например, : в sed при использовании/в регулярном выражении. Во-вторых, использование [] означает, что вы соответствуете символы внутри скобок (и как таковой он не расширят .+ до конца строки - вы потенциально могли бы попытаться поставить + после [])

+0

хорошее объяснение относительно скобок, но будьте осторожны в отношении".* ", так как это может сочетаться с жадностью, если оно помещено в начале шаблона. – repzero

+0

. Ваш отзыв об использовании жадного соответствия за пределами скобок решил его для меня, будет отмечен как ответ позже. Спасибо! –

1

возможно

sed 's#\(js/plex.js?\)[^"]\+".*#\1#g' 

..

\# is used as a delimiter 

\(js/plex.js?\)[^"]\+".* #find этот шаблон и заменить все с отмеченной рисунком \1 найден

Отмеченный шаблон

В СЭД вы можете пометить часть рисунка или весь узор купить с помощью \(\). ,

Когда часть шаблона заключена в скобках () сбежавших от backslashes..the узора помечаются/хранятся ...

в моем примере это мой рисунок без маркировки

js/plex.js?[^"]\+".* 

но я только хочу, чтобы sed помнил js/plex.js? и заменил всю линию только этим фрагментом рисунка js/plex.js? .. с сером первый маркированный рисунок известен как \1, второй \2 и т. д.

\(js/plex.js?\) ---> is marked as \1 

Поэтому я заменить всю строку с \1

+0

См. Ismail M, ответьте на то, что на самом деле делают скобки sed – repzero

+0

Не могли бы вы рассказать о отмеченном бите шаблона примером? –

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