2017-10-02 4 views
0

J'ai un fichier qui a le mot system = "Some Value" dans le fichier et le fichier est une ligne longue.Trouver toutes les instances de mots apparaissant dans un fichier suivi d'un signe égal et d'un guillemet

Si le fichier a été correctement formaté, je sais que je peux faire quelque chose comme:

cat filename | grep 'system="' 

et je les recevoir toute ligne par ligne. Mais avec le fichier étant plusieurs paragraphes et une longue ligne pour chaque paragraphe, je ne peux pas.

Il serait bon de vider toutes les fois que le système de mot plus il est la valeur dans un autre fichier comme ceci:

system="Some words" 
system="Some other words" 
system="and more" 
+1

veuillez fournir un exemple de fichier et son contenu, ainsi que la sortie désirée – markp

+0

Difficile à dire sans fichier d'entrée, mais 'grep -o 'system =" [^ "] *"' filename' pourrait fonctionner. –

Répondre

0

Puisque vous ne nous ont pas montré votre INPUT_FILE, donc je considère que voici votre Input_file.

cat Input_file 
system="Some words" system="Some other words" system="and more" 

maintenant suit est le code qui nous aidera à prendre la sortie comme sortie montrée.

awk '{gsub(/ system/,"\nsystem");print}' Input_file 

La sortie sera la suivante.

system="Some words" 
system="Some other words" 
system="and more" 

Explication: en utilisant simplement l'utilitaire de substitution global de awk pour remplacer toutes les occurrences de la chaîne system à un newline system. Puis imprimer la ligne.

EDIT: Ou avec une solution sed vous pouvez simplement remplacer tout système spatial par un nouveau système de ligne comme suit.

sed 's/ system/\nsystem/g' Input_file 
0

Benjamin avait la bonne réponse.

grep -o 'system="[^"]*"' filename > final.txt 

Apparemment, cela fonctionne très bien.

Appréciez l'aide!