J'ai un fichier texte de sortie un peu important où j'ai besoin de supprimer toutes les lignes entre deux motifs, mais conserver la correspondance de modèle.
Les fichiers ont l'air vaguement comme la sortie suivante. P>
sed: 1: "/^ +year/,/^ +_cons/{/^ ...": extra characters at the end of d command
5 Réponses :
Cela devrait fonctionner -
[jaypal:~/Temp] awk '/_cons/{print;f=0;next}/year/{f=1;print;next}f{next}1' file TEST #1 coef1 | 48.36895 3.32013 14.57 0.000 41.86141 54.87649 coef2 | -50.08894 10.47335 -4.78 0.000 -70.61697 -29.56092 | indicator | 0 | .6647992 2.646627 0.25 0.802 -4.55925 5.888849 1 | 2.118701 5.225777 0.41 0.686 -8.19621 12.43361 | year | _cons | 16.95753 6.342342 2.67 0.008 4.526383 29.38869 TEST #2 coef2 | 48.36895 3.32013 14.57 0.000 41.86141 54.87649 coef3 | -50.08894 10.47335 -4.78 0.000 -70.61697 -29.56092 | year | _cons | 16.95753 6.342342 2.67 0.008 4.526383 29.38869
Essayez d'ajouter un point-virgule après En outre, si vous devez prendre en charge plusieurs implémentations de donc: p> (testé, mais seulement GNU d code> pour indiquer que la commande est terminée. (GNU
sed code> - Le seul
SED code> J'ai utile de tester - ne nécessite pas cela, mais peut-être un autre
sed code> serait?)
SED CODE>, vous ne pouvez pas utiliser
+ code> pour signifier "un ou plusieurs": ce n'est pas standard, et pas toutes les implémentations soutiens le. Vous pouvez utiliser
\ {1, \} code>, mais c'est assez moche. . . J'utiliserais simplement
* code> et faire une copie supplémentaire sur une copie supplémentaire. P>
sed code>, pas OS X et certainement pas Aix, désolé.) P> p>
Cela ne supprimera-t-il pas année code> aussi?
@Jaypalsingh: non. . . Eh bien, oui, mais pas pour une raison profonde: c'est seulement que j'ai échoué à remplacer une instance de + code> avec
* code>. Corrigé maintenant. Merci.
Vous pouvez le faire visuellement.
Il suffit d'ouvrir le fichier avec gvim code> strong> et exécutez la commande:
explication: h3>
g code> strong> commande globale li>
/ ^ \ s * an / + 1 code> strong> ligne de match ci-dessous
année code> li>
/ ^ \ s * _cons / -1 code> strong> correspondance ci-dessus
_cons code> li> li>
d code> strong> Supprimer la plage li>
ul> p>
Cela pourrait fonctionner pour vous:
awk '/_cons/{p=0};!p;/year/{p=1}' file
Pour résumer et généraliser les deux solutions GNU SED qui fonctionnent:
sed '/BEGIN/,/END/{/BEGIN/!{/END/!d;}}' input.txt sed '/BEGIN/,/END/{//!d}' input.txt