Конкатенация части каждой строки файла с помощью команд BASH - PullRequest
0 голосов
/ 03 октября 2018

Используемая версия BASH:

echo $BASH_VERSION
4.4.19(1)-release

Я использую следующую сантехнику для извлечения всех запрещенных IP-адресов из файла журнала fail2ban:

cat /var/www/html/fail2ban.log | grep Ban | cut -d "]" -f3 | cut -d "r" -f2 | cut -d "e" -f2 | cut -d " " -f3 | uq | sort -n > /var/www/html/fail2ban.html

В результате получается файл HTMLсо списком IP-адресов, упорядоченных от низкого до высокого.

Моя цель - сделать каждый из IP-адресов кликабельными гиперссылками в целях удобства использования.Я успешно использовал следующие операции:


Шаг 1 - Добавьте каждую строку с начальной частью гиперссылок HTML.

Используемый код (успешно):sed -e 's/^/<a href=\"http:\/\//' -i /var/www/html/fail2ban.html

Шаг 2 - Добавить каждую строку с закрывающей частью гиперссылок HTML и разрывом строки.

Используемый код (успешно): sed -e 's/$/\">CLICK HERE<\/a><\/br>/' -i /var/www/html/fail2ban.html

Результат - Весь HTML-файл теперь содержит список ссылок, таких как:

<a href="http://10.30.20.40">CLICK HERE</a></br>


Проблема - Вместо того, чтобы "НАЖМИТЕ ЗДЕСЬ" в качестве текста ссылки, я хочу вместо этого отобразить соответствующий IP-адрес.Пример желаемого результата с использованием приведенного выше примера:

<a href="http://10.30.20.40">http://10.30.20.40</a></br>

Как этого последнего шага можно достичь с помощью sed, awk и т. Д .?


Пример ввода изфайл / var / www / html / fail2ban.html файл, содержащий следующие три строки:

<a href="http://1.2.3.4">CLICK HERE</a></br>
<a href="http://5.6.7.8">CLICK HERE</a></br>
<a href="http://9.10.11.12">CLICK HERE</a></br>

Желаемый вывод:

<a href="http://1.2.3.4">http://1.2.3.4</a></br> 
<a href="http://5.6.7.8">http://5.6.7.8</a></br>
<a href="http://9.10.11.12">http://9.10.11.12</a></br>

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать одну команду sed:

sed -e 's,^.*$,<a href="http://&">&</a></br>,' -i /var/www/html/fail2ban.html

См. онлайн-демонстрацию :

s="10.23.34.23
56.67.22.12"
sed -e 's,^.*$,<a href="http://&">&</a></br>,' <<< "$s"

Вывод:

<a href="http://10.23.34.23">10.23.34.23</a></br>
<a href="http://56.67.22.12">56.67.22.12</a></br>

Примечания:

  • ^.*$ соответствует любой строке полностью
  • * & в замене относится к полному тексту совпадений с .*
  • Символ , используется вместо /, чтобы избежать перерасхода / символов в регулярных выражениях и шаблонах замены.
...