Регулярное выражение для удаления всех строк, содержащих только 1 слово - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь создать регулярное выражение, которое найдет любую строку, содержащую ровно одно слово.Слова, разделенные дефисом или символом (например, тестовое слово) или начальным пробелом, по-прежнему должны рассматриваться как одно слово.

$cat file1
this line has many words
hello
  test-hi
this does aswell

Использование регулярного выражения

'/^\s*(\w+)\s$/GM'

Возвращает только "привет" и игнорирует "test-hi"

Я могу перехватить все отдельные слова, но не с дефисами и т. Д.

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Попробуйте использовать \S для сопоставления с любым символом без пробелов:

'/^\s*(\S+)\s$/GM'
0 голосов
/ 04 октября 2018

Это проще сделать с awk, по умолчанию каждая запись будет разделена на поля на основе одного или нескольких непрерывных пробелов, а пробелы в начале / конце строки не будут частью вычислений поля

$ awk 'NF==1' ip.txt
hello
  test-hi
$ awk 'NF>1' ip.txt
this line has many words
this does aswell

NF - это встроенная переменная, которая указывает количество полей во входной записи

0 голосов
/ 04 октября 2018

Вы можете использовать

^\s*([\w-]+)\s*$

, который добавляет поддержку дефисов, заставляет второй \s совпадать с пробелом "ноль или более".Держите свои GM флаги.

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...