Entfernen Sie eine Vielzahl von Linien in einer Textdatei
Frage
Ich habe versucht, ein Bash-Skript zu implementieren, die von wordnet der Online-Datenbank liest und haben sich gefragt, ob es einen Weg gibt eine Vielzahl von Textdateien mit einem Befehl zu entfernen.
Beispiel 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"
Ich muss nur die Linien entfernen, die Aspekte der Grammatik beschreiben z.B.
**** Noun ****
**** Verb ****
**** Adjective ****
So, dass ich eine saubere Datei mit nur Definitionen der Worte:
(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"
Die * Symbole um die grammatischen Begriffe Auslösung mich in sed auf.
Lösung
Wenn Sie ganze Zeilen aus einer Datei nur auf den Inhalt dieser Zeilen basierend auswählen möchten, ist grep
wahrscheinlich das am besten geeignete Werkzeug zur Verfügung. Allerdings sind einige Zeichen, wie Ihre Sterne, haben eine besondere Bedeutung grep
, so sein müssen „entkommen“ mit einem umgekehrten Schrägstrich. Dies druckt nur die Zeilen mit vier Sternen Einstiegs- und Raum:
grep "^\*\*\*\* " textfile
Sie möchten jedoch die Linien zu halten, die nicht Spiel, das, so müssen Sie die -v
Option für grep
, die gerade das tut: druckt die Linien, die nicht entsprechen dem Muster.
grep -v "\*\*\*\* " textfile
Das sollte Sie geben, was Sie wollen.
Andere Tipps
sed '/^\*\{4\} .* \*\{4\}$/d'
oder etwas lockere
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"