У меня очень длинный файл (подробнее генерируется более 4000 строк в день) в следующем формате.
yqiemmtcveihai
test-trans
10.227.30.66
<----------->
14.192.17.143
<----------->
peuddnbtmzdptw
Ttest-trans1
10.227.30.67
<----------->
14.192.17.142
<----------->
cqykfavuxpuqiq
Med
202.21.32.218
<----------->
hziuqbvuncwkie
Myubun
202.21.32.230
<----------->
Я хочу удалить запись <----------->
только между IP-адресами. Итак, результат должен быть в таком формате.
yqiemmtcveihai
test-trans
10.227.30.66
14.192.17.143
<----------->
peuddnbtmzdptw
Ttest-trans1
10.227.30.67
14.192.17.142
<----------->
cqykfavuxpuqiq
Med
202.21.32.218
<----------->
hziuqbvuncwkie
Myubun
202.21.32.230
<----------->
Может ли кто-нибудь предложить мне сценарий, желательно на bash, для достижения этой цели? Голову ломал, но не мог понять.
Я хочу удалить запись <-----------> только между IP-адресами.
Предполагая, что ваша проблема может быть сформулирована как «Я хочу удалить строки, содержащие <----------->
, но только если за ними следует IP-адрес ', то приведенные ниже примеры могут сработать для вас.
Большинство из них являются адаптациями отличных ответов на этот вопрос SO .
sed -E '$!N;s/<----------->\n(([0-9]{1,3}\.){3}[0-9]{1,3})/\1/;P;D' input.txt
awk 'NR==1 {l=$0; next}
/^([0-9]{1,3}\.){3}[0-9]{1,3}$/ {
if(l == "<----------->") { l=$0; next }
}
{print l; l=$0}
END { print l }' input.txt
perl -00 -pe 's/<----------->\n((\d{1,3}\.){3}\d{1,3})/$1/g' input.txt
python -c \
"import re; print re.sub(r'^<----------->\n((\d{1,3}\.){3}\d{1,3})$',
r'\1', open('input.txt').read(), flags=re.M),"