Итак, я неплохо разбираюсь в регулярных выражениях, но у меня проблемы с ними в 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 , но похоже, что действительно ограниченная поддержка для расширенное регулярное выражение ...
В PHP я мог бы сделать что-то вроде этого:
preg_match('#(word1).*(word2)#',$text,$matches);
Я не уверен, как это было бы возможно в * nix ...