Удалить различные строки в текстовом файле - PullRequest
0 голосов
/ 24 октября 2009

Я пытался реализовать 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"

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

Ответы [ 4 ]

4 голосов
/ 24 октября 2009

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

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

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

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

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

2 голосов
/ 24 октября 2009
sed '/^\*\{4\} .* \*\{4\}$/d'

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

sed '/^*\{4\}/d'
1 голос
/ 24 октября 2009
 sed 's/^*.*//g' test | grep .
0 голосов
/ 24 октября 2009
# 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"
...