Как выполнить поиск определенного целого числа в текстовом файле

Как выполнить поиск определенного целого числа в текстовом файле

Есть ли простой способ поиска в текстовом файле (исходном коде) всех экземпляров определенного целого числа? Это не должно срабатывать на больших числах, которые случайно включают целое число как подстроку, но это не может просто исключить такие строки, поскольку они могут содержать оба случая:

поиск «6»…

int a=6; // found
int b=16; // not found (despite the '6' in '16')
int c=6, d=16; // found

Я действительно ищу подход к этому с помощью командной строки, но также интересно, есть лиФОССРедактор с графическим интерфейсом, который это сделает.

решение1

grep -E '\b6\b'

\bявляется «границей слова»

Редактировать: После того, как я указал @nobar правильное направление, он нашел/указал на опцию shortcut-option -w(word-regexp) на странице руководства, которая упрощает вышеизложенное до:

grep -w 6

Если вы часто используете эту функцию, вы можете использовать функцию, похожую на

wgrp(){ grep -w "$1" "$2"; }

Примечание (для @glenn-jackman): Если вы не цитируете "$2"здесь, вы можете использовать функцию как фильтр конвейера. Но да, тогда она не будет работать с именами файлов с пробелами.

Прочитав еще один замечательный ответ от @Gilles, я предлагаю

igrp(){ grep -E "(^|[^0-9])$1($|[^0-9])" "$2"; }

решение2

Вы можете искать определенное целое число с помощью регулярного выражения. Поиск цифр, которым предшествует либо начало данных, либо нецифровой символ, а также после цифр.

grep -e '^6$' -e '^6[^0-9]' -e '[^0-9]6$' -e '[^0-9]6[^0-9]'   # BRE syntax
grep -E '(^|[^0-9])6($|[^0-9])'                                # ERE syntax

Поиск по целому слову, как предлагается в других ответах, пропускает совпадения, такие как foo6bar. (Это может не быть проблемой для вашего варианта использования, но это то, о чем вы спрашивали.)

Любой более-менее серьезный текстовый редактор или просмотрщик (например less) имеет поиск по регулярным выражениям. Проверьте его документацию, чтобы узнать, какой синтаксис регулярных выражений он использует.

решение3

Я думаю, это не было такой уж неясной потребностью. Мой постоянный редактор программирования,плюмаподдерживает это через диалог "найти" с помощью опции "Соответствовать только целому слову". Я уверен, что во многих других редакторах это тоже есть -- хотя на данный момент, по-видимому, не предок Pluma,gedit.

введите описание изображения здесь

Связанный контент