Как grep файлы, содержащие ТОЛЬКО числа?

Я пытаюсь найти имена текстовых файлов, содержащих только числа и числа, но я понятия не имею, подходит ли grep для этой работы.

если у меня есть файлы, как показано ниже...

FILE1: 12324
FILE2: 12345q
FILE3: qqerxv

Он должен дать мне только имя FILE1.

Я пробовал grep -r -l [a-zA-Z], но это дает мне противоположное.

Какой шаблон мне следует использовать? Что мне делать, чтобы найти все, кроме файлов, содержащих что-либо, кроме чисел

Как мне grep файлы, которые содержат ТОЛЬКО числа?


person ShamanWarrior    schedule 28.08.2019    source источник


Ответы (3)


grep -r -L "[^0-9 ]" .

[^0-9 ] будет соответствовать всему, что не содержит цифр или пробелов (подумалось, что это подойдет, иначе все файлы, содержащие пробелы и числа, будут отброшены).

Флаг -L равен --files-without-match, так что в основном это дает вам файлы, которые ДЕЙСТВИТЕЛЬНО содержат цифры или пробелы.

Инверсия поиска намного лучше, чем поиск файлов, содержащих [a-zA-Z], потому что этот поиск прервется, если там будут какие-либо другие специальные символы (_=+&...).

Кстати, флаг -r будет рекурсивно искать в текущем каталоге. Если вы хотите искать только файлы в текущем каталоге, я предлагаю удалить -r и заменить . на * или просто заменить его именем одного файла, который вы хотите сопоставить.

person Thomas Q    schedule 28.08.2019
comment
Класс символов [:digit:], вероятно, безопаснее, чем 0-9. Затем вы можете рассмотреть возможность использования read -r decimal_point thousands_sep < <(locale LC_NUMERIC), чтобы включить их в свой шаблон. - person Léa Gris; 29.08.2019
comment
Спасибо, это то, что мне было нужно. Я благодарен ! - person ShamanWarrior; 29.08.2019

Пожалуйста, используйте шаблон регулярного выражения: \b([0-9])*\b

Это должно помочь вам найти строки, содержащие только числа.

Теперь, чтобы извлечь имя файла из вывода, приведенного выше, вы можете использовать команду cut, передав вывод grep? tocut`, т.е.

cat data.txt | grep \b([0-9])*\b | cut -f 1 -d ":"

Здесь я предположил, что вы сохранили список ваших имен файлов в файле data.txt.

Параметры, используемые в grep:

  • \b -- граница слова
  • [0-9] -- соответствует только цифре
  • () -- группировка

Параметры, используемые в cut:

  • f -- для выбора поля
  • d -- указать разделитель
person nocut    schedule 29.08.2019
comment
cat бесполезен и извлекает текст, а не имена файлов, от data.txt. - person tripleee; 29.08.2019
comment
Кроме того, аргументы grep не являются параметрами. - person tripleee; 29.08.2019

Эти awk должны делать:

awk '!/[^0-9]/ {print FILENAME}' FILE*
awk '!/[a-zA-Z]/ {print FILENAME}' FILE*
FILE1

Он напечатает все Filenames из файлов, которые содержат только цифры

person Jotne    schedule 29.08.2019