Извлечь несколько подстрок из очень длинной строки - PullRequest
0 голосов

У меня очень длинная строка текста в формате:

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)?

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Использование 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
0 голосов
/ 18 июня 2019

Вы можете использовать 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 напечатает только соответствующие детали.Если в одной строке несколько совпадений, они печатаются в отдельные строки.

...