Bash: отображать содержимое текстового файла с выделением каждого вхождения слова [дубликат]

Чтобы прояснить ситуацию, я ищу эквивалент

airmon-ng start wlan1

Вы можете добавить интерфейс монитора через iw команда:

iw phy phy1 interface add mon1 type monitor

Для захвата с помощью интерфейса mon1 , вы можете удалить wlan1 интерфейс

iw dev wlan1 del

Включить mon1

ifconfig mon1 up

Установить частоту :

iw dev mon1 set freq put_the frequency_here

Проверьте это с помощью iwconfig mon1

1
26.01.2017, 18:05
2 ответа
grep -C $(wc -l foo.txt | cut -d" " -f 1) --color word foo.txt

Где foo.txt - это путь к файлу, а слово - это поисковый запрос. Если вы не знакомы с grep , помните, что поисковый запрос на самом деле является регулярным выражением . Это не имеет значения, если слово является чисто буквенно-цифровым, но некоторые символы, такие как [ и ] , имеют особое значение в регулярном выражении, и если вы хотите используйте их буквально, префикс \ . Кроме того, это проходит через оболочку, поэтому $ будет делать забавные вещи, если также не будет экранирован с помощью \ .

Вы можете включить пробелы в слово , если заключите его в кавычки.

Здесь также используются другие команды wc и cut , которые почти всегда будут доступны в системе POSIX, такой как GNU / Linux. У них есть man страниц, объясняющих их использование.

3
27.01.2020, 23:14

Вы можете сделать это с помощью grep. Где file.txt - ваш файл, а word - текст, который вы хотите выделить, вы можете использовать:

grep --color -E 'word|$' file.txt

Это соответствует и выделяет вхождения word. Кроме того, в качестве альтернативы (|) он сопоставляет и выделяет пустую строку в конце каждой строки ($). Но поскольку эта строка пустая, никакой дополнительный текст не выделяется.

Совпадение $ в дополнение к word служит для того, чтобы каждая строка содержала совпадение. Тогда grep печатает каждую строку, даже без опций -A, -B или -C или каких-либо вызовов других утилит.

Флаг -E заставляет grep интерпретировать аргумент шаблона как расширенное регулярное выражение POSIX (ERE). В зависимости от того, какие символы содержатся в слове, вы можете заставить его использовать вместо этого базовое регулярное выражение (BRE). Хотя чередование с | официально не является частью базовых регулярных выражений POSIX, реализации grep часто поддерживают его как расширение с \|:1

grep --color 'word\|$' file.txt

В частности, в системах GNU/Linux есть GNU Grep, который поддерживает это. Если вы полагаетесь на --color, то, скорее всего, вы тоже можете рассчитывать на такое поведение.

Эти команды проще, чем способ из ответа goldilocks's answer. Но способ из того ответа имеет явное преимущество в некоторых обстоятельствах. Поскольку в приведенных здесь методах используются | и $, они действительно должны быть регулярными выражениями, а не фиксированными строками. Однако, используя метод Златовласки, вы можете добавить флаг -F. Тогда слово может содержать любой текст, даже \, если вы правильно процитируете слово , чтобы оболочка передала его в grep без изменений.

Например, вы можете использовать:

grep --color -FC "$(wc -l < file.txt)" 'word' file.txt

Для дальнейшего чтения смотрите Убедите grep выводить все строки, а не только те, в которых есть совпадения (как steeldriver предложил).


1Насколько стандарт (IEEE Std 1003.1-2008) определяет, чередование является особенностью ERE (через |), но оно не является особенностью BRE. Но реализациям разрешено интерпретировать \| так, как они хотят, и многие интерпретируют это как чередование:

Некоторые реализации расширили синтаксис BRE, чтобы добавить чередование. Например, подвыражение "\(foo$\|bar\)" будет соответствовать либо "foo" в конце строки или "bar" в любом месте. Расширение срабатывает при использовании неопределенной последовательности "\|".

3
27.01.2020, 23:14

Теги

Похожие вопросы