Utiliser sed
pour modifier le fichier en place:
sed -i '/^\(report\|-t\(h\|o\)\)/!d' your_file
Cela demande sed
de supprimer toutes les lignes ne correspondant pas au modèle. Le motif lui-même est ^
(début de ligne), suivi de l'un report
ou -t
de l'autre h
ou de ou o
.
Vous devez noter que ce n'est pas une modification réelle sur place: sed
crée une copie de sauvegarde temporaire et écrase le fichier d'origine avec.
Si vous souhaitez sed
conserver une copie de sauvegarde du fichier d'origine (ce qui peut être une bonne idée si le fichier contient des données critiques), donnez au -i
commutateur une extension pour créer un fichier de sauvegarde:
sed -i'.bak' -e '/^\(report\|-t\(h\|o\)\)/!d' your_file
va modifier your_file
et créer une sauvegarde de l'original appelé your_file.bak
.
Une note latérale
Veuillez ne pas mal interpréter mes intentions ou m'en offusquer, mais j'ai remarqué que vous avez de nombreuses questions similaires liées à l'expression rationnelle / au traitement de texte. Je vous conseille de commencer à apprendre sed
, awk
et grep
par vous-même pour accélérer votre productivité. Encore une fois, ne vous méprenez pas, je suis trop heureux d'aider (comme la plupart des gens ici); c'est juste que je pense que vous bénéficierez énormément de ramasser ces outils pour votre usage quotidien.
Juste pour prouver à quel point les gens sont utiles ici, tenez compte de la suggestion de @ slm dans les commentaires ci-dessous et n'hésitez pas à visiter ce salon de discussion à tout moment pour des questions.
Vous pouvez utiliser un simple grep pour cela:
la source
-th
/-to
dans-t[ho]
.grep -e
ouegrep
En utilisant
sed
:la source
-th
/-to
dans-t[ho]
.En utilisant
awk
:la source
-th
/-to
dans-t[ho]
.L'intervenant a soulevé deux points:
Les solutions, à l'heure actuelle, abordent le premier point et donc aussi le second. Mais supposons que le fichier soit plus grand et ressemble à:
Le deuxième point d'OP ne répondrait-il pas aux besoins?
fait le travail de supprimer les lignes vraisemblablement indésirables contenant uniquement des espaces, des points et des tirets et de conserver le reste, quel qu'il soit.
Je pense que le risque de l'une ou l'autre approche est que la nature du fichier n'est pas correctement définie.
la source
Utilisation de Perl:
ou, pour éditer sur place (comme
sed
,perl
fera également une sauvegarde temporaire donc ce n'est pas vrai sur place ):Cela fera une copie du fichier d'origine appelé
filename.bak
et écrasera votre fichier d'origine avec la version modifiée.la source