Назад | Перейти на главную страницу

Regex для содержимого / etc / passwd

У меня есть файлы коллекции из многих систем на моем предприятии в каталоге магазина (/ store /), и я хотел найти все файлы passwd и объединить их в один файл. Интуитивно я придумал и использовал следующую команду:

find /store/ -name passwd -type f  -exec cat {} + > all_passwds.txt

Но это также собирает файл / etc / passwd, который является двоичными файлами (я предполагаю, что некоторые системы символизируют ссылку на busybox или что-то в этом роде). Мне просто нужны текстовые файлы passwd.

Моя следующая мысль заключается в том, что, возможно, я смогу найти все файлы / etc / passwd и вытащить совпадения с регулярными выражениями. Я пару часов пытался создать регулярное выражение, которое будет соответствовать формату passwd.

Мы будем очень благодарны за любую помощь по созданию регулярного выражения, которое будет соответствовать файлам / etc / passwd, или по обеспечению того, чтобы приведенная выше команда захватывала только текстовые файлы passwd.

Если вы хотите использовать регулярное выражение, тогда ^([^:]*:){6}[^:]*$ вероятно, достаточно, чтобы сопоставить семь полей, разделенных : в каждой строке, чтобы вы могли:

find /store -name passwd -type f -exec grep -hIE '^([^:]*:){6}[^:]*$' {} + > all_passwds.txt
  • -h опустите имена файлов в выводе
  • -I пропустить двоичные файлы
  • -E включить расширенные регулярные выражения (ERE)

Во-первых: двоичные файлы, скорее всего, bin/passwd - т.е. инструмент смены пароля ...

Простое решение, которое может сработать, если все, что вам нужно passwd файлы находятся в подкаталогах, называемых etc:

 find /store/ -wholename '*/etc/passwd'

Это только найдет etc/passwd файлы, которые должен быть правильного формата.

Если это не сработает, создайте цикл с file утилита и объединить, только если это текстовый файл:

file /etc/passwd
   /etc/passwd: ASCII text

Наконец, я выбрал следующее регулярное выражение из старого фрагмента кода PHP. При необходимости адаптируйте:

\w+:\w+:\d+:\d+:[\w\d\s,@()]*:[\w\d\s\/]*:[\d\s\w\/]*