У меня очень длинная строка текста в формате:
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)?
Спасибо





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