Вот одно возможное решение sed
- которое позволяет event
появляться в любом месте строки, это должно быть полное слово (а не часть более длинного слова, например eventful
), и может быть несколько MA C адреса в строке - все они должны быть замаскированы, если слово event
присутствует в той же строке. Я также использую xx:xx:xx:xx:xx:xx
в качестве маски, но вы можете легко заменить это.
Я создал следующий входной файл для тестирования:
$ cat mac.input
[INFO] device 1 event - client connected with aa:bb:8a:de:8e:23
[ERROR] device 2 event - routing data to gg:7a:e3:89:2f:2f failed
[LOG] device 3 connected
[INFO] connected to 2 devices. event: aa:bb:8a:de:8e:23 success!
[LINE] this was an eventful evening 22:33:22:33:22:33
[TWO MAC ADDRESSES] aa:bb:aa:33:dd:1f is event 99:33:00:23:43:83 good
Как я уже упоминал, «адрес» во второй строке не будет маскироваться (даже если присутствует слово event
), потому что адрес не является действительным адресом MA C для начала - g
не является шестнадцатеричным di git. Адрес в строке [LINE]
не будет маскироваться, потому что слово event
само по себе отсутствует (хотя eventful
есть). В последней строке есть два адреса MA C, и я замаскировал оба - даже тот, который появляется перед словом event. (Я попросил вас в комментарии уточнить, возможны ли такие ситуации, и если да, то как с ними обращаться; здесь я просто сделал случайный выбор, чтобы показать, что возможно.)
Итак, вот sed
команда и ее вывод:
$ sed -E '/\bevent\b/
> s/([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}/xx:xx:xx:xx:xx:xx/g' mac.input
[INFO] device 1 event - client connected with xx:xx:xx:xx:xx:xx
[ERROR] device 2 event - routing data to gg:7a:e3:89:2f:2f failed
[LOG] device 3 connected
[INFO] connected to 2 devices. event: xx:xx:xx:xx:xx:xx success!
[LINE] this was an eventful evening 22:33:22:33:22:33
[TWO MAC ADDRESSES] xx:xx:xx:xx:xx:xx is event xx:xx:xx:xx:xx:xx good