2009-10-24 7 views
0

J'ai essayé de mettre en place un script bash qui lit la base de données en ligne de WordNet et se demandent s'il y a un moyen de supprimer un fichier texte de variété avec une seule commande.Retirer une variété de lignes dans un fichier texte

Exemple 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" 

J'ai juste besoin d'enlever les lignes qui décrivent les aspects de la grammaire par exemple

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

Alors que je dispose d'un fichier propre avec seulement les définitions des mots:

(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" 

Les symboles * autour des termes grammaticaux me trébuchement dans sed.

Répondre

4

Si vous voulez sélectionner des lignes entières à partir d'un fichier basé uniquement sur le contenu de ces lignes, grep est probablement l'outil le plus approprié disponible. Cependant, certains caractères, tels que vos étoiles, ont une signification particulière à grep, donc besoin d'être « échappé » avec une barre oblique inverse. Cela affichera seulement les lignes commençant par quatre étoiles et un espace:

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

Cependant, vous voulez garder les lignes se font pas match qui, vous devez donc l'option -v pour grep qui fait juste que : imprime les lignes qui ne pas correspondent au modèle.

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

Cela devrait vous donner ce que vous voulez.

+0

Votre explication, et le deuxième morceau de code à la fois m'a aidé, et atteint le résultat. – user191960

1
sed 's/^*.*//g' test | grep . 
+0

Le vôtre a également atteint la solution - mais vous étiez juste un peu en retard pour la tique. Les deux réponses atteignent le résultat de la question. – user191960

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

ou un peu plus lâche

sed '/^*\{4\}/d' 
+0

Votre commande a également fonctionné. – user191960

0
# 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" 
Questions connexes