我的一行文字格式很长:
http://address1/user1=username1;ip1=ipaddres1;password1=pass1;some text;http://address2/user2=username2;ip2=ipaddress2;password2=pass2;some text;...etc
我如何从此行中提取用户名(部分在user1 =,user2 =之后)和ip地址(部分在ip1 =,ip2 =之后)(该行中有超过20个用户名和ip地址)并将其放入两个文件中(user.txt,ip.txt)?
谢谢
答案 0 :(得分:0)
您可以使用grep
查找匹配的部分,并使用cut
删除=
之前的内容:
grep -o 'user[0-9]=[^;]*' input.txt | cut -d= -f2- > user.txt
grep -o 'ip[0-9]=[^;]*' input.txt | cut -d= -f2- > ip.txt
-o
仅打印匹配的部分。如果同一行上有多个匹配项,则将它们打印到单独的行中。
答案 1 :(得分:0)
使用awk
:要存储到单独的文件中:
gawk -v RS='some text' '{$1=$1;match($0,/user[0-9]+=([^;]+).*ip[0-9]+=([^;]+).*/,a);print a[1]>"username";print a[2] > "ipaddress"}' long_file
cat username
username1
username2
cat ipaddress
ipaddres1
ipaddress2
此awk
假设每个记录之间存在some text
。
或将grep
与-P
一起使用:
grep -oP 'user[0-9]+=\K[^;]+' long_file > username
grep -oP 'ip[0-9]+=\K[^;]+' long_file >ip_address