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