Dans un fichier contenant des lignes comme celle-ci:
# lorem ipsum blah variable
Je voudrais supprimer le caractère #
(commentaire) dans la même ligne qui contient une chaîne spécifique, en place. Est-ce sed
bon pour ça?
J'ai du mal à faire fonctionner ce conditionnel. J'ai une façon "maladroite" de faire cela; Je peux trouver le numéro de ligne correspondant avec awk
ou sed
puis utiliser ce numéro dans une sed
commande distincte , mais je pense que cela peut être fait de bien meilleure façon.
's/#//g'
supprimera tous les#
caractères de la ligne. Si ce n'est pas ce que vous voulez, supprimez leg
(qui signifie «global»). (2) Pour éditer un fichier en place (comme demandé dans la question), utilisezsed -i
.sed -i '/ipsum/s/#[[:space:]]*//'
pour supprimer les espaces et les tabulations immédiatement après le#
. (4) Vous pouvez également envisager de vérifier que le#
est le premier caractère non vide de la ligne. La commande actuelle supprimerait le#
de la ligneprompt "Enter # of ipsums:"
.sed -i '/ipsum/s/^#[[:space:]]*//'
?! (^
signifie début de ligne,$
pour fin de ligne) - au moins dans gnu sed ...^
, mais ce serait faux. Je commente souvent le code indenté en mettant#
immédiatement le code avant, donc le#
est indenté. Je doute que je suis la seule personne à le faire.^
et#
, donc quelque chose comme ceci:/ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}
. Bien que même dans ce cas, en fonction de l'endroit où il se#
trouve, cela puisse toujours causer des problèmes (par exemple dans les langues qui utilisent l'indentation / séparation des espaces blancs).ensuite:
donne:
Cela fonctionne comme suit:
Le
s
ditsed
qu'il doit remplacer ce que trouve l'expression régulière.Le modèle est
# \(.*blue.*\)
le suivant: trouver un hachage suivi d'un espace. Le crochet (\(
) démarre le regroupement..*blue.*
est le motblue
avec quoi que ce soit avant et après. Le crochet suivant (\)
) ferme le regroupement.Le remplacement est
\1
une référence arrière au contenu du premier support de regroupement.la source
Vous pouvez utiliser Vim en mode Ex:
s
remplacerx
sauver et fermerla source