Замаскировать адрес электронной почты, номер телефона, ssn (шаблон) с помощью awk

Требуется замаскировать некоторые конфиденциальные данные из файла журнала, приведенный ниже код работает должным образом, когда awk версия 4.0.2.

Я буду grep обрабатывать файлы журналов, а затем должен маскировать некоторые данные с помощью шаблона, как указано в приведенном ниже awk фрагменте, а затем возвращать результат.

echo "123-123-432-123-999-889 and 123456 and 1234-1234-4321-1234 and [email protected]" | awk ' gsub (/[0-9]{6,}|([0-9]{3,}.){3,}|\w{2,}@\w{2,}.\w{2,}/, "****") 1'

То же самое не работает в версии awk 3.1.7, которая является версией рабочего сервера.

Я могу использовать только grep, cat, awk, и у меня нет разрешения на использование perl или sed, так как оно ограничено командой администраторов.

Ожидаемый результат:

****and **** and ****and ****

Решение также должно работать, если содержимое находится в файле, например

sample.log

123-123-432-123-999-889
and 
123456
and
1234-1234-4321-1234 
and [email protected]

Команда:

 cat sample.log  | awk ' gsub (/[0-9]{6,}|([0-9]{3,}.){3,}|\w{2,}@\w{2,}.\w{2,}/, "****") 1'

Пожалуйста, помогите мне с awk, который может работать в 3.1.7 версии awk


person Chandre Gowda    schedule 04.01.2018    source источник
comment
Почему sed ограничен?   -  person 123    schedule 04.01.2018
comment
Журналы находятся на рабочем сервере, и у нас нет разрешения на команды, которые могут напрямую изменять файлы там.   -  person Chandre Gowda    schedule 04.01.2018
comment
Но awk может.... Почему бы просто правильно не установить разрешения. Если у вас есть доступ для записи, вы можете просто сделать >file. Запрещать команды смешно.   -  person 123    schedule 04.01.2018
comment
@123, Кстати, журналы создаются другим пользователем, и у нас есть доступ только для чтения к этим файлам. и да, я знаю, что эти обходные пути работают, если у нас есть разрешение на запись, но наш администратор может подумать, что мы не знаем об этом. У них есть ограниченные команды «touch», но › (перенаправление) создает файл :).   -  person Chandre Gowda    schedule 04.01.2018


Ответы (1)


Активируйте интервалы RE с помощью:

awk --re-interval '...'

Вам также МОЖЕТ понадобиться заменить \ws на [[:alnum:]_].

Проблема, с которой вы столкнулись, заключается в том, что вы используете очень старую версию gawk до того, как интервалы RE (например, {1,3}) были включены по умолчанию, поэтому в этом старом gawk каждые { и } — это просто буквальный символ для обратной совместимости с 1980-ми годами. awks (старые, сломанные awk и nawk), поэтому вам нужно явно указать gawk интерпретировать {1,3} как интервал RE вместо буквальной строки из 5 символов.

Не знаю, поддерживалось ли тогда \w или нет, поэтому вам МОЖЕТ также понадобиться использовать вместо этого выражение в квадратных скобках, которое я предложил выше.

person Ed Morton    schedule 04.01.2018
comment
@EdMorton, спасибо, все получилось, добавив --re-interval без замены \w - person Chandre Gowda; 04.01.2018