J'ai un fichier comme ça:
other lines . . .
blah blah blah (:34)
Je souhaite trouver l'occurrence de nombres dans le fichier ci-dessus. Je suis venu avec:
grep [0-9] filename
Mais c'est imprimer le tout:
blah blah blah (:34)
Je veux plutôt seulement 34
. Y a-t-il un moyen de le faire?
Vous pouvez utiliser grep -E
pour accéder à la syntaxe d'expression régulière étendue (idem egrep)
J'ai créé un fichier de test avec le contenu ci-dessous:
>cat testfile
this is some text
with some random lines
again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)
Maintenant, pour écrire seulement les nombres du texte que vous pouvez utiliser
>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324
sera sortie.
Ici "- o" est utilisé pour sortir uniquement le segment correspondant de la ligne, plutôt que le contenu complet de la ligne.
Les crochets ({et}, par exemple) indiquent le nombre d'instances de la correspondance. {1,4} exige que le caractère ou la classe de caractères précédent apparaisse au moins une fois, mais pas plus de quatre fois.
J'espère que cela t'aides
Vous pouvez utiliser l'expression de parenthèse RE [:digit:]
spécifiée à la section 9.3.5 de norme POSIX , en combinaison avec l'indicateur -o
pour n'imprimer que les "mots" correspondants.
$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'
123
grep -o
n'imprimera que la partie correspondante de la ligne. Sinon, grep imprimera toutes les lignes avec le motif.
J'utiliserais curl pour accéder à votre fichier localement ou à distance, puis je ferais un grep avec des lignes entourées de nombres entre (:), puis couperais ces morceaux et écrirais dans le fichier
la réponse acceptée ignore qu'il pourrait y avoir des numéros dans les lignes précédentes du fichier, cela fonctionne pour les données d'exemple, mais que se passe-t-il si le fichier est distant?
Local
curl file:///home/$USER/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
Dans cet exemple, output.txt
de votre dossier actuel sera remplacé, nous allons accéder à input.txt
à partir de votre dossier Public.
à distance
curl https://yoursite.com/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
Dans cet exemple, output.txt
de votre dossier actuel sera remplacé, nous allons accéder à input.txt
à partir de https://yoursite.com/Public/
.