регулярное выражение частных IP-адресов и удаление из файла журнала

Cree un archivo de hosts llamado hosts.txtque contenga los hosts que desee. Luego ejecuta:

for i in $(cat hosts.txt); do for j in {1..4}; do rsync -hav -e ssh
--info=progress2
user@loggerserver:/xxx/xxxx/$i/logs/JVM_Name_$j/logs/messages.log
/cygdrive/d/xxx/xxxx/$i/JVM_Name_$j/messages.log; done; done

Puede cambiar los números entre llaves para que contengan el rango que desee.

0
23.08.2018, 01:06
3 ответа

Поскольку требовалось удалить только «частные» IP-адреса (10... ), регулярное выражение, заданное ender.qa, можно было уточнить до

sed -E '/T/s/T/:/1; s/,10\.([0-9]{1,3}.){2}[0-9]{1,3}//g' file

или, поскольку этот IP-адрес не будет содержать пробелов, даже короче:

sed -E '/T/s/T/:/1; s/,10\.[^ ]*//g' file
0
28.04.2021, 23:43

Похоже, вам нужны «данные до»:

2018-06-03T23:59:57.000Z 66.249.66.129,10.0.1.81 [03/Jun/2018:23:59:57 +0000]...

будет "данные после":

2018-06-03:23:59:57.000Z 66.249.66.129 [03/Jun/2018:23:59:57 +0000]...

Верно?

Если да:

cat logs.txt | sed '/T/s/T/:/1' | sed -e 's/,.*\[//g'

Кроме того, вам не нуженcat:

sed '/T/s/T/:/1' logs.txt | sed -e 's/,.*\[/ \[/g'

По сути, вы удаляете любые символы (. *)между запятой (, )и левой скобкой ([), которую необходимо экранировать.

Если вы хотите удалить только IP-адрес

sed '/T/s/T/:/1' logs.txt | sed -re 's/,([0-9]{1,3}\.){3}[0-9]{1,3}//g'

ИЛИ

sed '/T/s/T/:/1' logs.txt | sed -e 's/,\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}//g'

Ссылка:https://stackoverflow.com/a/14928879/4635198

0
28.04.2021, 23:43

Не не совсем то, что вы просили, но здесь показано как использоватьgrepcidrдля фильтрации (удаления)строк , содержащих IP-адреса в диапазоне частных адресов 10.0.0.0 -10.255.255.255 в файлеfile:

grepcidr -v '10.0.0.0-10.255.255.255' file

То же самое, но с использованием синтаксиса сетевого блока CIDR:

grepcidr -v '10.0.0.0/8' file
0
28.04.2021, 23:43

Теги

Похожие вопросы