J'ai file
avec
denm.xyz
denm.abc
denm.def
denm_xyz
denm_abc
denm_def
Je veux extraire ceux avec .
dedans.
J'ai essayé
grep "denm\.*" file
grep 'denm\.*' file
sed "/denm\.*/p" file
sed '/denm\.*/p' file
Ces choses correspondent à tout dans le file
Cependant, en utilisant awk
awk '/denm\./' file
travaillé!!
Comment faire de même en utilisant grep
ou sed
Vous étiez proches, il vous suffit de supprimer *
, ce qui signifie une correspondance égale ou supérieure au jeton précédent, .
dans ce cas. En conséquence, le demn_
apparaît également dans le résultat car il correspond à la condition de zéro .
.
Alors tu peux faire:
grep 'denm\.' file.txt
De même dans sed
:
sed -n '/denm\./p' file.txt
Notez que vous avez manqué l'option -n
de sed
, sans elle sed
, toutes les lignes seront également imprimées.
Il existe également de nombreux niveaux de précision pouvant être ajoutés pour obtenir exactement ce que vous voulez dans des cas complexes, mais prenez-le comme point de départ.
Exemple:
% grep 'denm\.' file.txt
denm.xyz
denm.abc
denm.def
% sed -n '/denm\./p' file.txt
denm.xyz
denm.abc
denm.def
\.*
signifie "n'importe quel nombre d'occurrences du caractère .
", y compris zéro. Comme les noms de fichiers soulignés commencent par denm
, suivis de zéro, le caractère .
, ils correspondent. grep "denm\." file
fonctionnera.
Si vous avez uniquement besoin des lignes contenant un _.
_, utilisez grep avec des chaînes fixes au lieu d'expressions régulières:
_grep -F . file
_
De man grep
:
_-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
_
Avec des chaînes fixes, tous les caractères spéciaux d'expression régulière perdent leur signification.
sed
n'a pas d'option correspondante.
J'ai tendance à utiliser des crochets au lieu de barres obliques inverses pour m'échapper:
_egrep "denm[.].*" file
sed -r 's/denm[.]/.../'
_
Cela me épargne l’effort de penser si et comment je devrais échapper aux antislashs. (La version finale _.*
_ est redondante ici.)