Баш, чтобы найти строки с точно одним словом? - PullRequest
1 голос
/ 24 октября 2011

Я пытаюсь написать bash-скрипт, который принимает имя файла и возвращает строки, содержащие одно слово.Вот пример текста:

This has more than one word
There
is exactly one word in above line.
         White-space
in the start of the above line doesn't matter.
Need-some-help.

Вывод:

There
         White-space
Need-some-help.

Я собираюсь использовать комбинацию SED и Regex.

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

Ответы [ 5 ]

6 голосов
/ 24 октября 2011

Если слова могут содержать любые непробельные символы, то:

grep -E '^\s*\S+\s*$'

или

sed -E '/^\s*\S+\s*$/!d'

или

sed -n -E '/^\s*\S+\s*$/p'
2 голосов
/ 24 октября 2011

Если у вас есть awk: awk 'NF==1'

sed: удалить любую строку с последовательностью «не пробел, пробел» sed '/[^ ] +[^ ]/d'

1 голос
/ 24 октября 2011

Ну, вы можете просто удалить строки, содержащие символ + пробел + символ, используя sed.

#!/bin/bash
echo "This has more than one word
There
is exactly one word in above line.
         White-space
in the start of the above line doesn't matter.
Need-some-help." | sed '/\S \S/d' -
0 голосов
/ 24 октября 2011

При условии, что вы можете использовать grep (один из самых распространенных инструментов, используемых в сценариях оболочки):

#!/bin/bash
grep '^ *[^ ]\+ *$' "$@"
0 голосов
/ 24 октября 2011
^\s*\b[a-zA-Z.-]+\s*$

Для части регулярного выражения и при условии, что вы ищите файл построчно, это регулярное выражение будет соответствовать, только если в строке ровно одно слово.

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