Вопрос

Я пытался реализовать скрипт bash, который считывает данные из онлайн-базы данных wordnet, и мне было интересно, есть ли способ удалить различные текстовые файлы одной командой.

Пример FileDump:

**** Noun ****
(n)hello, hullo, hi, howdy, how-do-you-do (an expression of greeting) "every morning they exchanged polite hellos"
**** Verb ****
(v)run (move fast by using one's feet, with one foot off the ground at any given time) "Don't run--you'll be out of breath"; "The children ran to the store"
**** Adjective ****
(adj)running ((of fluids) moving or issuing in a stream) "as mountain stream with freely running water"; "hovels without running water"

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

**** Noun ****
**** Verb ****
**** Adjective ****

Итак, у меня есть чистый файл с только определениями слов:

(n)hello, hullo, hi, howdy, how-do-you-do (an expression of greeting) "every morning they exchanged polite hellos"
(v)run (move fast by using one's feet, with one foot off the ground at any given time) "Don't run--you'll be out of breath"; "The children ran to the store"
(adj)running ((of fluids) moving or issuing in a stream) "as mountain stream with freely running water"; "hovels without running water"

Символы * вокруг грамматических терминов сбивают меня с толку в sed.

Это было полезно?

Решение

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

grep "^\*\*\*\* " textfile

Однако вы хотите сохранить строки, которые не соответствуют этому, поэтому вам нужна опция -v для grep , которая только это: печатает строки, которые не соответствуют шаблону.

grep -v "\*\*\*\* " textfile

Это должно дать вам то, что вы хотите.

Другие советы

sed '/^\*\{4\} .* \*\{4\}$/d'

или немного слабее

sed '/^*\{4\}/d'
 sed 's/^*.*//g' test | grep .
# awk '!/^\*\*+/' file
(n)hello, hullo, hi, howdy, how-do-you-do (an expression of greeting) "every morning they exchanged polite hellos"
(v)run (move fast by using one's feet, with one foot off the ground at any given time) "Don't run--you'll be out of breath"; "The children ran to the store"
(adj)running ((of fluids) moving or issuing in a stream) "as mountain stream with freely running water"; "hovels without running water"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top