unix sed commande de l'expression régulière
Quelqu'un peut-il m'expliquer comment l'expression régulière travaille dans le sed commande de substitution.
$ cat path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin
$ sed 's/\(\/[^:]*\).**//g' path.txt
/usr/kbos/bin
/usr/local/sbin
/opt/omni/lbin
À partir du dessus de la sed de commande, ils ont utilisé le dos de référence et d'enregistrer le concept de l'opérateur.
Quelqu'un peut-il m'expliquer comment l'expression régulière surtout /[^:]* travail dans la commande de substitution pour obtenir uniquement le premier de chaque ligne.
sed 's/:.*//' path.txt
serait une simple commande.
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez écrit un extra astérisque
*
dans votre sed code, il devrait ressembler à ceci:Pour changer le séparateur aidera à comprendre un peu mieux:
La
s#something#otherthing#g
est une basesed
de commande qui ressemble à dessomething
et le modifie pourotherthing
tous sur le fichier.Si vous ne
s#(something)#\1#g
, alors vous "enregistrer" quisomething
et puis vous pouvez l'imprimer en arrière avec\1
.Ainsi, ce qu'il est en train de faire est d'obtenir un modèle de type
/[^:]*
et ensuite de l'impression est de retour./[^:]*
signifie/and then every char except :
. Ainsi il sera/
+ toute la chaîne jusqu'à ce qu'il trouve un point-virgule:
. Il va stocker qu'élément de la chaîne, puis de l'imprimer en arrière.Petits exemples:
dans l'expression rationnelle correspond à tous les caractères sauf pour
:
, de sorte qu'il serait de match jusqu'à présent:aussi il pourrait correspondre à ces,
Que, toutes ces contient des caractères, qui ne sont pas
:
.*
correspondre à n'importe quel caractère, zéro ou plusieurs fois.Ainsi, cette regex
[^:]*.*
, correspondent à toutes ces expressions:Cependant, vous obtenez seulement le premier champ (c'est à dire,
/usr/kbos/bin
, en utilisant le dos de référence danssed
), parce que, d'expression régulière de sortie la plus longue possible de match trouvé.