2010-06-24 4 views
1

Format:Retirez tout le texte à l'aide sed

[] {} mot-clé "UC (ICL> restriction)" (attributs); (brillant)

Le fichier testme.txt dispose de 2 lignes

[testme] {} "acetify" (V,lnk,CJNCT,AJ-V,VINT,VOO,VOO-CHNG,TMP,Vo) <H,0,0>; 
[newtest] {} "acid-fast" (ADJ,DES,QUAL,TTSM) <H,0,0>; 

Le résultat attendu est la suivante:

testme = acetify 
newtest = acid-fast 

ce que j'ai accompli jusqu'à présent est:

cat testme.txt | sed 's/[// g' | sed 's /] // g' | sed 's/{}/=/g' | sed « s/\" // »

testme = acetify" (V,lnk,CJNCT,AJ-V,VINT,VOO,VOO-CHNG,TMP,Vo) <H,0,0>; 
newtest = acid-fast" (ADJ,DES,QUAL,TTSM) <H,0,0>; 

Comment puis-je supprimer tout le texte de la seconde" à la fin de la ligne?

Répondre

1

Retirez tout ce qui suit le guillemet-espace-openparenthesis " (:

sed 's/" (.*//g' 
1

L'ensemble du processus peut être un peu plus rapide avec awk:

awk 'NF > 0 { print $1 " = " $3 }' testme.txt | tr -d '[]"' 
1

c'est comment vous le faites avec awk au lieu de toutes ces commandes sed, ce qui est inutile. ce que vous voulez est le champ 1 et sur le terrain 3. Utilisez gsub() pour enlever les guillemets et les supports

$ awk '{gsub(/\"/,"",$3);gsub(/\]|\[/,"",$1);print $1" = "$3}' file 
testme = acetify 
newtest = acid-fast 
1

Votre séquence entière de plusieurs appels à sed peut être remplacé par:

sed 's/\[\([^]]*\)][^"]*"\([^"]*\).*/\1 = \2/' inputfile 
Questions connexes