Je cherche grep pour montrer tous les caractères qui ne commencent pas par des nombres. J'ai fait quelque chose comme ça:
grep -v '^[1-2]*[a-zA-Z]?' -o
mais ça ne marche pas. Avez-vous une idée pour une exp reg?
grep
regular-expression
Paweł Jaworowski
la source
la source
-v
avec-o
provoquergrep
ne produit aucune sortie.grep
utilise des expressions régulières de base . Cela signifie que votre?
est traité comme un point d'interrogation littéral. Soit échapper au point d'interrogation\?
, soit utiliser l'-E
option pourextended
les expressions régulières, auquel cas il?
s'agit d'un caractère de modèle.Réponses:
grep -v '^[0-9]'
Sortira toutes les lignes qui ne correspondent pas
-v
aux lignes commençant^
par un nombre[0-9]
Par exemple
ou si vous souhaitez supprimer tous les mots commençant par un chiffre
ou avec des raccourcis et des assertions
Par exemple
la source
\> Matches the null string at the end of a word. This is equivalent to
[[:>:]] '.'Cela dépend de la façon dont vous définissez une chaîne (par exemple, si vous comptez les caractères de ponctuation dans la chaîne ou non). Néanmoins, vous pouvez commencer par quelque chose comme
la source
Pour supprimer tous les mots d'une ligne commençant par un nombre,
sed
vous pouvez procéder comme suit:... ou, si vous vouliez uniquement des mots qui ne commencent pas par des chiffres imprimés chacun sur une ligne distincte:
... ce qui précède devrait assez bien fonctionner. Vous voudrez adapter la traduction
\n
ewliney///
pour les séparateurs que vous jugez pertinents. Et,sed
en fonction de l'implémentation, vous voudrez peut-être également un véritable<tab>
remplacement de la\t
barre oblique inverse.la source
!
avant du'"'
swap, mais si vous utilisez,bash
vous voudrez peut-êtreset +H
ou sizsh
alorsset -K
. À mon avis, toute!
expansion citée est une folie. Vous pouvez également utiliser des heredocs comme"${0#-}" <<\CMD\nyour cmd strings\nCMD\n
pour obtenir un comportement scripté dans des shells interactifs."${0#-}" <<...
astuce!"${0#-}" -s -- arg list <<\CMD\n...
vous pouvez également définir les paramètres de position lors de l'invocation. Utiliser"$@"
ou*
me sert souvent à la place dearg list
. Et avecln -s "$(command -v "${0#-}")" /tmp/new_name; cd tmp; new_name <<\CMD\n...
vous, vous pouvez obtenir un nouveau$0
stdin.