Как использовать sed для проверки, а затем редактировать одну строку ввода? - PullRequest
0 голосов
/ 25 октября 2009

Я хочу проверить, является ли номер телефона действительным, а затем перевести его в другой формат с помощью сценария. Это далеко я могу проверить число, как это:

sed -n -e '/(0..)-...\s..../p' -e '/(0..)-...-..../p'

Однако я не просто хочу проверить число и вывести его, я хотел бы удалить квадратные скобки, тире и пробелы и вывести его.

Есть ли способ сделать это с помощью sed? Или я должен использовать что-то еще, например, AWK?

Ответы [ 4 ]

2 голосов
/ 25 октября 2009

Я не уверен, почему вы используете 0 в этой позиции. Вы говорите «ноль, за которым следуют любые два символа» в позиции кода города. Это действительно то, что вы имеете в виду?

В любом случае, вы хотите использовать оператор подстановки sed с командой p в сочетании с переключателем -n. Вот один из способов сделать это:

sed -n 's/(\([0-9][0-9][0-9]\))\s\?\([0-9][0-9][0-9]\)[- ]\([0-9][0-9][0-9][0-9]\)/\1\2\3/p'
1 голос
/ 25 октября 2009

Это более лаконичная версия ответа Джонатана Фейнберга . Он использует расширенные регулярные выражения, чтобы избежать необходимости выполнять все экранирования, которые потребуются в фигурных скобках (в дополнение к переносу экранирования скобок из специальных в буквальные).

sed -r 's/\(([[:digit:]]{3})\)\s?([[:digit:]]{3})[ -]([[:digit:]]{4})/\1\2\3/'
1 голос
/ 25 октября 2009

Вы также можете использовать что-нибудь простое, например egrep для проверки строк и tr для удаления символов, которые вы не хотите видеть:

egrep "\([0-9]+\)[0-9.-]+" <file> |tr -d '()\-'

Обратите внимание, что это будет работать только в том случае, если вы не хотите сохранять эти символы.

0 голосов
/ 25 октября 2009

это предложение зависит от того, как выглядит ваш числовой формат, например, я предполагаю, что номер телефона такой

echo "(703) 234 5678" | awk '
{
 for(i=1;i<=NF;i++){
    gsub(/\(|\)/,"",$i)    # remove ( and )
    if ($i+0>=0  ){ # check if it more than 0 and a number
        print $i
    }
    if (){
       # some other checks
    }
 }
}
'

делайте это систематически, и вам не придется тратить время на разработку сложного регулярного выражения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...