Est-il possible de le faire dans une doublure?
J'ai une sortie comme celle-ci:
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
Cette entrée est générée automatiquement.
Je veux remplacer la première occurrence de "
(guillemet + espace) par "
(guillemet) pour chaque ligne. Si j'applique la substitution à l'échelle mondiale, cela changera également chaque occurrence de line" -
en line"-
, donc je me demandais s'il était possible d'utiliser un liner sed pour y parvenir.
J'ai essayé d'utiliser ^
comme ça
sed -r ':a;N;$!ba;s/(\^\" )/\"/g'
Mais ça ne marche pas, ça ne remplace rien. j'ai essayé
sed -r ':a;N;$!ba;s/(^|\" )/\"/g'
et il remplace toutes les occurrences. Je viens de commencer à utiliser sed, donc je ne sais pas vraiment si je fais quelque chose de mal.
Qu'est-ce que j'oublie ici?
sed
regular-expression
Steve B.
la source
la source
sed
, mais pour la portabilité et pour éviter des erreurs vraiment étranges, vous devez terminer un argument de commande donné après une étiquette (si vous en avez besoin). Par exemple,sed -e ':a' -e 'N;$!ba' -e 'whatever'
Réponses:
Vous y pensez trop.
sed
remplace uniquement la première instance sur une ligne par défaut (sans le/g
modificateur), bien que vous souhaitiez toujours ancrer parce que vous ne souhaitez pas tant la première instance de la ligne que celle au début de la ligne; et vous n'avez généralement pas besoin des actions de ligne explicites que vous essayez d'utiliser (pourquoi?).la source
sed
commandes multilignes telles queN
et les étiquettes telles que:a
ne sont pas du tout obsolètes et elles sont portables et spécifiées POSIX , contrairement à Perl / Python / Ruby / peu importe. Il est vrai cependant que si vous en avez souvent besoin , vous devriez apprendreawk
.Une réponse plus générale, car je ne peux pas commenter la réponse du geekosaure - Vous ne mettriez pas le ^ (début de l'ancre de ligne). Par exemple, si vous voulez remplacer la première occurrence de A par B, vous auriez
la source