Так что я довольно хорошо разбираюсь в регулярных выражениях, но у меня возникли некоторые проблемы с ними в unix.Вот две вещи, которые я хотел бы знать, как это сделать:
1) Заменить весь текст, кроме букв, цифр и подчеркивания
В PHP я бы сделалэто: (прекрасно работает)
preg_replace('#[^a-zA-Z0-9_]#','',$text).
В bash я пробовал это (с ограниченным успехом);похоже, что он не позволяет вам использовать полный набор регулярных выражений:
text="my #1 example!"
${text/[^a-zA-Z0-9_]/'')
Я пробовал его с помощью sed, но, похоже, все еще возникают проблемы с полным набором регулярных выражений:
echo "my #1 example!" | sed s/[^a-zA-Z0-9\_]//
Я уверен, что есть способ сделать это и с помощью grep, но он разбил его на несколько строк, когда я попытался:
echo abc\!\@\#\$\%\^\&\*\(222 | grep -Eos '[a-zA-Z0-9\_]+'
И, наконец, я также попытался использовать expr , но казалось, что действительно ограниченная поддержка расширенного регулярного выражения ...
2)
Захват (несколько) частей текста В PHP я мог бы просто сделать что-то вроде этого:
preg_match('#(word1).*(word2)#',$text,$matches);
Я не уверен, как это было бы возможно в * nix ...