我喜欢创建批处理脚本,该脚本将对从文件中提取的变量执行某些任务。
我试图找到一些正则表达式,或者说更多的正则表达式,因为我需要很少的变量。
我以bash读取的文件具有:
username [mutiple spaces] = User Name [mutiple spaces] <u.name@domain.com>
我想做的是:
-获取用户名:“用户名”
-获取全名:“用户名”
-获取电子邮件:“ 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"
答案 0 :(得分:0)
好的,我会做一些假设。
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"
答案 1 :(得分:0)
在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作为电子邮件。