$ sed -E -n -e '/ HAS NOT BEEN PATCHED/ {
s/^(\[[^]]*\]).*([A-Z]:)/\1 - \2/;
s/ HAS NOT BEEN PATCHED.*//p}' nessus.log
[IP address] - C:\WINDOWS\SYSTEM32\GPPREF.DLL
[IP address] - C:\WINDOWS\SYSTEM32\BCRYPT.DLL
[IP address] - C:\WINDOWS\SYSTEM32\GPPREF.DLL
[IP address] - C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL12.ACT7\MSSQL\BINN\SQLSERVR.EXE
Для каждой строки, соответствующей HAS NOT BEEN PATCHED
, удалите все, что находится между IP-адресом и первой буквой диска ([A-Z]:
). «IP-адрес» определяется как все, что находится внутри квадратных скобок -в начале строки, кроме закрытой квадратной скобки --([^]]*
). Затем удалите все, начиная с HAS NOT BEEN PATCHED
до конца строки, и напечатайте измененную строку.
Я рекомендую использовать символ табуляции \t
в качестве разделителя полей между IP-адресом и путем вместо-
(пробел, тире, пробел ). Это облегчило бы дальнейшую работу.
Регулярные выражения / HAS NOT BEEN.../
включают пробел в начале, чтобы избежать появления висящего символа пробела на выходе.
Вutil-linux
(по крайней мере за последние 4 года кажется):
2015-03-23 08:47 18963 usr/bin/script.exe
2015-03-23 08:47 14355 usr/bin/scriptreplay.exe