grep в unix / linux: как заменить или захватить текст?

Итак, я неплохо разбираюсь в регулярных выражениях, но у меня проблемы с ними в 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 ...

5
задан codaddict 31 January 2011 в 03:00
поделиться