Как добавить результат регулярного выражения в существующий текстовый файл в bash? - PullRequest
1 голос
/ 09 января 2020

Допустим, у меня есть существующий текстовый файл, который содержит IP-адрес.

ip_list.txt

192.168.1.1
10.135.135.2

Я запускаю скрипт, который берет raw json, каждый из которых содержит IP-адрес, который затем извлекает IP-адрес с помощью регулярных выражений и добавляет его в файл. Однако он добавляет пустые строки. Я не хороший bash пользователь, так что это может быть просто синтаксическая ошибка.

ip = $(grep -Eo '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' '$1')

echo "$ip" >> /root/temp/ip_list.txt

Что я здесь не так делаю? Я чувствую, что я рядом.

Если я запускаю grep -Eo '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])' 'log_file.txt

Я не сталкиваюсь с какими-либо проблемами.

1 Ответ

1 голос
/ 10 января 2020

Вы должны удалить пробелы по обеим сторонам = и убедиться, что используются двойные кавычки вокруг $1, чтобы разрешить переменное расширение (оно не выполняется внутри одинарных кавычек):

ip=$(grep -Eo '((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' "$1")

I также используйте немного сокращенный шаблон регулярных выражений IP.

См. online Bash demo :

f="192.168.1.1
10.135.135.2"
ip=$(grep -Eo '((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' <<< "$f")
echo "$ip"

Вывод:

192.168.1.1
10.135.135.2
...