Ce qui fait le sens de “-n” sed?
Selon http://linux.about.com/od/commands/l/blcmdl1_sed.htm
supprimer l'impression automatique de modèle
l'espace
J'ai testé avec ou sans -n
, sed va produire le même résultat
Je ne comprends pas ce que l'espace ne signifie.
Vous devez vous connecter pour publier un commentaire.
Juste essayer un sed ne rien faire:
et
Première impression sera tout le fichier mais la seconde ne sera PAS impression quoi que ce soit.
-n
ET-i
. J'ai obtenu un fichier vide et ne comprends pas pourquoi. J'ai arrêté juste parce que j'ai vu votre commentaire, merci!Sed a deux endroits pour stocker du texte: modèle de l'espace et de contenir d'espace. Modèle de l'espace est l'endroit où chaque ligne est mis à être traitées par des commandes sed; maintenez l'espace est un auxiliaire de la place pour mettre un peu de texte vous pouvez utiliser plus tard. Vous n'aurez probablement utiliser seul modèle de l'espace.
Avant sed va pour le traitement d'une ligne, il est placé dans le modèle de l'espace. Ensuite, sed s'applique à toutes les commandes (comme
s///
) de modèle de l'espace et, par défaut, imprime le débouché de texte à partir de la configuration de l'espace. Supposons que nous ayons un fichiermyfile
avec une ligne comme:Nous exécutez la commande suivante:
Sed va appliquer
s/fox/coati/
et puiss/dog/dingo/
pour chaque ligne du fichier - dans ce cas, le seul nous avons montré ci-dessus. Lorsque cela se produit, il va mettre la ligne dans le modèle de l'espace, qui aura le contenu suivant:Puis, sed va lancer la première commande. Après sed exécute la commande
s/fox/coati/
, le contenu du modèle de l'espace sera:Puis sed va appliquer la deuxième commande, qui est
s/dog/dingo/
. Après cela, le contenu du modèle de l'espace sera:Noter que cela n'arrive que dans la mémoire - rien n'est imprimé par maintenant.
Après toutes les commandes ont été appliquées à la ligne en cours, par défaut, sed obtiendrez alors le contenu du modèle de l'espace et de l'imprimer sur la sortie standard. Toutefois, lorsque vous donnez
-n
comme une option pour le sed, vous demandez à sed de ne pas exécuter cette dernière étape sauf si elle est explicite requis. Donc, si vous exécutezrien ne sera imprimé.
Mais comment pourriez-vous demander explicitement sed pour imprimer le modèle de l'espace? Eh bien, vous pouvez utiliser le
p
de commande. Lorsque sed trouve cette commande, il permet d'imprimer le contenu du modèle de l'espace immédiatement. Par exemple, dans la commande ci-dessous, nous demande de sed pour imprimer le contenu du modèle de l'espace juste après la première commande:Le résultat sera
Noter que seuls les
fox
est remplacé. Cela arrive parce que la deuxième commande n'ont pas été exécutées avant que le modèle de l'espace en cours d'impression. Si nous voulons imprimer le modèle de l'espace après les deux commandes, nous venons de mettrep
après la seconde:Une autre option, si vous utilisez le
s///
de commande, est de passer lep
drapeau às///
:Dans ce cas, la ligne ne sera imprimé que si le pavillon de remplacement a été exécuté. Il peut être très utile!
Cela met sed en mode silencieux, où sed va supprimer toutes les sorties sauf si explicitement indiqué par un
p
commande:Un exemple de ceci serait si vous vouliez l'utiliser sed pour simuler les actions de grep:
sans
-n
, vous obtiendrez une occurrence de c (et deux occurrences de a et b)Le modèle de l'espace est imprimé implicitement.
$ echo "a b c d" | sed -n "s/a/apple/"
Pas de sortie.
Explicitement imprimez le modèle de l'espace.