web-dev-qa-db-fra.com

Utilisation de la commande grep et cut delimiter (dans bash Shell scripting UNIX) - et sorte de "renverser" cela?

J'ai donc un fichier avec le texte:

puddle2_1557936:/home/rogers.williams/folderz/puddle2

Je veux utiliser la commande grep

grep puddle2_1557936

Mixé avec la commande cut (ou une autre commande si nécessaire) pour afficher uniquement cette partie:

/home/rogers.williams/folderz/puddle2

Jusqu'à présent, je sais que si cela

 grep puddle2_1557936 | cut -d ":" -f1

alors il affichera

puddle2_1557936

Existe-t-il de toute façon une sorte d '"inverse" de la commande de coupure du délimiteur?

REMARQUE: La solution doit commencer par grep puddle2_15579636.

7
DeaIss

Vous n'avez pas besoin de modifier le délimiteur pour afficher la partie droite de la chaîne avec cut.

Le -f le commutateur de la commande cut est l'élément n-TH séparé par votre délimiteur: :, vous pouvez donc simplement taper:

 grep puddle2_1557936 | cut -d ":" -f2

Une autre solution (adaptez-la un peu) si vous voulez vous amuser:

En utilisant grep :

grep -oP 'puddle2_1557936:\K.*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                                        
/home/rogers.williams/folderz/puddle2

ou encore avec regardez autour de vousregex

grep -oP '(?<=puddle2_1557936:).*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                                    
/home/rogers.williams/folderz/puddle2

ou avec Perl :

Perl -lne '/puddle2_1557936:(.*)/ and print $1' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                                                      
/home/rogers.williams/folderz/puddle2

ou en utilisant Ruby (merci à glenn jackman )

Ruby -F: -ane '/puddle2_1557936/ and puts $F[1]' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2

ou avec awk :

awk -F'puddle2_1557936:' '{print $2}'  <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2

ou avec python :

python -c 'import sys; print(sys.argv[1].split("puddle2_1557936:")[1])' 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
/home/rogers.williams/folderz/puddle2

ou en utilisant uniquement bash :

IFS=: read _ a <<< "puddle2_1557936:/home/rogers.williams/folderz/puddle2"
echo "$a"
/home/rogers.williams/folderz/puddle2

ou en utilisant js dans un Shell :

js<<EOF
var x = 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'
print(x.substr(x.indexOf(":")+1))
EOF
/home/rogers.williams/folderz/puddle2

ou en utilisant php dans un Shell :

php -r 'preg_match("/puddle2_1557936:(.*)/", $argv[1], $m); echo "$m[1]\n";' 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2
24
Gilles Quenot