Я застрял в этой задаче. У меня есть список вроде этого:Возвратите только последовательность строк с конкретными узорами
(...)
distName="PLMN-PLMN/MRBTS-4130/LNBTS-4130/FTM-1/IPNO-1"
"btsId">4130<
IpAddress">10.52.71.38</p>
(...)
И я делаю окончательный файл так:
MRBTS-4130,4130,10.52.71.38
Но иногда некоторые части отсутствуют, и файл выглядит следующим образом:
distName="PLMN-PLMN/MRBTS-4130/LNBTS-4130/FTM-1/IPNO-1"
"btsId">4130<
distName="PLMN-PLMN/MRBTS-4132/LNBTS-4132/FTM-1/IPNO-1"
"btsId">4132<
IpAddress">10.52.71.38</p>
distName="PLMN-PLMN/MRBTS-4135/LNBTS-4135/FTM-1/IPNO-1"
"btsId">4135<
distName="PLMN-PLMN/MRBTS-4138/LNBTS-4138/FTM-1/IPNO-1"
И в мой последний файл Я хотел бы иметь только такие строки:
MRBTS-4132,4132,10.52.71.38
Так что я хотел бы искать только линии, где у меня есть такие пары:
- первая линия имеет DISTNAME
- вторая линия имеет btsId
- третья линия Ipaddress
линии с различные последовательности, такие как:
- first distName
- второго btsId
- третий DISTNAME снова
будет просто отвергнут.
У меня в настоящее время такой код:
grep -E "MRBTS|btsId|IpAddress" topology.xml > temp_list
id_list=(`grep -E "btsId" temp_list | grep -o '[0-9]*'`)
ip_list=(`grep -E "IpAddress" temp_list | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"`)
id_size=${#id_list[*]}
for ((e=0; e<$id_size; e++ ))
do
echo "MRBTS-${id_list[e]};${ip_list[e]}" >> id_list
done
Но как вы можете видеть это принимать некоторые недостающие последовательности строк, и я хотел бы избежать такого сценария.
Я голосовал, чтобы закрыть этот вопрос как не относящийся к теме, потому что StackOverflow не является службой написания кода. Что вы пробовали? – cadrian
В настоящее время я делаю это: –
покажите нам свои усилия, и мы можем вам помочь. –