Скрипт BASH для поиска предложений из одного слова

#regex #bash #scripting #matching

#регулярное выражение #bash #написание #сопоставление

Вопрос:

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

Примером ввода и вывода будет

Там 
в классе 20 учеников.
[ТАБУЛЯЦИЯ] [ПРОБЕЛ] Почти 
половина из них зачислена в FOS. Остальные находятся в
Преподаватели.

Вывод из скрипта должен выглядеть следующим образом

Там
[ТАБУЛЯЦИЯ] [ПРОБЕЛ] Почти
Преподаватели.

Здравствуйте, я начинающий программист, и я пытаюсь изучить bash scripting уже более месяца, но подобные вопросы все еще ставят меня в тупик. Пожалуйста, обрисуйте общий подход.Спасибо

Комментарии:

1. Каково ваше определение «слова»?

2. Как вы определяете bash-скриптинг? Можете ли вы вызывать скрипты на Perl или Python? Awk? Sed?

Ответ №1:

grep -P "^[s]*[0-9A-Za-z-] .?[s]*$" test.txt

Где test.txt содержится входной текст.

Здесь я определяю слово как имеющее ноль или более пробелов в начале и конце. Затем любая комбинация алфавитов, цифр и - и , необязательно заканчивающаяся точкой.

ПРИМЕЧАНИЕ :: Это не сработает, если вы рассматриваете числа с плавающей запятой как слово. Следовательно, ваше определение a word определяет результат и регулярное выражение.

Комментарии:

1. попробовал .. это работает, спасибо всем. Нет, я не думаю, что мы рассматриваем числа с плавающей запятой как word.

2. Если у вас нет grep -P , попробуйте гораздо более простой egrep -i '[-a-z0-9][^-a-z0-9] [-a-z0-9]' test.txt

Ответ №2:

вероятно, самый простой способ: awk 'NF==1' filename

Ответ №3:

Код: cat $1 | egrep "^s*w s*$" > output.txt .

Объяснения:

  1. Вы можете ссылаться на переменные, которые использует ваша программа, $1..$9 поэтому, если вы запустите свою программу, $ > myprogram filename.txt тогда $1 будет filename.txt

2. Вы можете прочитать содержимое файла с помощью cat filename . Вы можете перенести содержимое файлов в следующую строку кода, используя | (символ канала).

  1. Вы можете использовать egrep программу для отображения только строк, в которых совпадает регулярное выражение.

  2. регулярное выражение для получения строк только из одного слова может быть: ^s*w s*$ . которое гласит: в начале строки может быть ноль или более пробелов (s — пробелы, * равно нулю или более, ^ — начало строки). затем один или несколько символов ( w — буквы, цифры и подчеркивание, — один или несколько). затем ноль или более пробелов, а затем должен быть конец строки. это означает, что это регулярное выражение не будет отображать строку ‘something something’, потому что оно ожидает конец строки после пробела, а не больше слов.

  3. Вы можете перенаправить вывод egrep в файл, используя перенаправления: > filename .

Комментарии:

1. бесполезный cat бесполезен. egrep может принимать аргумент file. также регулярное выражение не подтверждает требуемый вывод, в частности, последний