Извлечь один элемент из строк текстового файла

Извлечь один элемент из строк текстового файла

Команда grepвыведет строку, если строка содержит строку, соответствующую выражению, что неудобно для поиска указанного содержимого.

Например, у меня есть файлы словаря с форматированием

**word**
1. Definition:
2. Usage
3. Others

Я хотел бы извлечь все слова, чтобы создать список слов в файлах.

grep '\*\*[^*]*\*\*'

Возвращает большую часть контента.

Как использовать, grepчтобы поймать только word?

решение1

Как это для слова, используярегулярное выражение ( -P):

grep -oP '^\s*\*\*\K[^*]+(?=\*\*)' file

Выход :

word

Вот так для слов:

grep -oP '^\s*\d+\.\s*\K\w+' file

Выход :

Definition
Usage
Others

решение2

Существует несколько инструментов, которые можно использовать для извлечения слов. Вот версия, реализованная в sed:

 sed '/^\*\*/!d' <your_file

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

sed '/^\*\*/!d;s/\*//g' <your_file

Кроме того, эта команда удалит все *символы из строки перед ее печатью.

решение3

С awkпомощью:

awk -F'*\\*' 'NF>2{print $2}' infile

пример тестового ввода:

*wrd*
*woooord
**WRD
WORD**
woooooooooood*
**word**

выход:

word

решение4

Если вы не против использования дополнительных инструментов, очень простым решением будет пост-фильтрация вывода grepс trцелью удаления всех вхождений символа *:

grep -x '\*\*[^*]*\*\*' | tr -d '*'

Я также рекомендую вам использовать -xфлаг GNU grep, как указано выше, чтобы сопоставлять только целые строки, чтобы случайно не поймать **word**окружение другим текстом на той же строке. Это также может ускорить процесс сопоставления с образцом, поскольку теперь он может отбросить многие потенциальные совпадения на ранней стадии.

sedальтернатива

Вы также можете воспользоваться pфлагом sed для сопоставления, замены и вывода в виде одной команды:

sed -nre 's/^\*\*([^*]*)\*\*$/\1/p'

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