Фильтровать данные из файла с помощью регулярных выражений в Bash - PullRequest
0 голосов
/ 20 мая 2019

Мне нравится создавать пакетный скрипт, который будет выполнять некоторую задачу для переменных, извлекаемых из файла.

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

Я читаю файл в bash, который имеет:

username [mutiple spaces] = User Name [mutiple spaces] <u.name@domain.com>

Что мне нравится делать:
- Получить имя пользователя: 'username'
- Получить полныйname: 'User Name'
- Получите электронную почту:'u.name@domain.com'

Как уже упоминалось выше, я пытаюсь собрать все эти детали в несколько (три) переменных
Что у меня естьна данный момент это:

input="svn_usernames.txt"
while IFS= read -r line
do
  #USERNAME=$(echo "$line" | awk '{print $1}')
  #echo $USERNAME
  echo "$line" | perl -pe '/\s\s+/g and / /g'
done < "$input"

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

В bash как «один вкладыш» - мы можем использовать @dvo aswer: echo "username = User Name <u.name@domain.com>" | perl -lane 'while (/([^\s]+)\s+\=\s(\w+ \w+)\s+<([^>]+)>/g) {print $1}' Где:
$ 1, может быть в качестве номера группы в этом случае $ 1 имя пользователя
$ 2 имя с пробелом
3 $ в качестве электронного письма.

0 голосов
/ 20 мая 2019

Хорошо, я сделаю некоторые предположения.

1) There WILL be spaces before *AND* after the equals
2) "username" is a login id
3) the user's actual name might have multiple fields - given name, surname, etc.
4) the email is JUST the email inside angle brackets.

С учетом приведенных,

input="svn_usernames.txt"
while read -a line && (( ${#line[@]} )) # while can read a row
do username="${line[0]}"                # assign 1st to username
   email="${line[-1]//[<>]/}"           # last to email w/o <>
   name="${line[@]:2:$(( ${#line[@]} - 3 ))}" # all between to name
   echo "username:[$username] name=[$name] email=[$email]"
done < "$input"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...