Je veux donc convertir une liste numérotée d’un formulaire spécifique à un autre.
de cette forme:
1. numberedlist 2. one 3. two
à cette forme:
# numberedlist # one # two
Je fais d’autres modifications sur ce fichier en utilisant sed. Je veux donc utiliser sed pour identifier la première forme chaque fois qu’elle se produit et sans limites, même si la liste numérotée contient plus de 3 éléments.
Mes pensées à propos de cela sont:
en premier : invoquer une ligne contenant le motif (qui est un nombre> un point> un espace …. '[[:digit:]]\. '
) dans le Pattern Space
second : invoque la ligne suivante dans le pattern Space et vérifie si elle contient '[[:digit:]]\. '
'[[:digit:]]\. '
ou pas. et continuez ainsi jusqu’à ce que la ligne suivante n’arrive pas à la Regex .. puis remplacez-la par #s. mais oui, je ne sais pas si c’est même possible.
C’est ce que j’utilise maintenant:
s/[[:digit:]]\. /# /
mais oui je sais que ce n’est pas très efficace. Je suis toujours un peu nouveau dans le monde des sed alors toute aide a été appréciée. Merci.
Edit: désolé pour la confusion les gars, mon but est de changer juste l’index de la liste en #. n’importe quel nombre a commencé de 1. à juste #. Je veux juste convertir les listes numérotées en démarques pour le moteur de numérotation automatique.
Je ne peux pas utiliser quelque chose comme s/[[:digit:]]\. /# /
s/[[:digit:]]\. /# /
car cela changera toute acuité du motif même si ce n’est pas une liste.
Une solution sed
possible:
sed -r 's/^[[:digit:]]+\. /# /g'
-r
: traite le motif de recherche comme une expression rationnelle étendue /^[[:digit]]+\. /# /g
/^[[:digit]]+\. /# /g
: recherche les lignes qui commencent par 1 ou plusieurs chiffres suivies d’un point et d’un espace et, si elles sont trouvées, remplacent par un #
suivi d’un espace Par exemple:
$ cat datfile 1. numberedlist 2. one 3. two where in the world is waldo 10. pickles 15. jam # I'm just a comment sky blue 100. bash 101. ksh 102. csh 72.don't touch this # rubber ducky
Et un test de notre script sed
:
$ sed -r 's/^[[:digit:]]+\. /# /g' datfile # numberedlist # one # two where in the world is waldo # pickles # jam # I'm just a comment sky blue # bash # ksh # csh 72.don't touch this # rubber ducky
Utilisez simplement awk
:
$ echo "1. numberedlist 2. one 3. two 55. fifty-five" | awk '{$1="#"} 1' # numberedlist # one # two # fifty-five
Si vous souhaitez détecter uniquement les lignes commençant par des chiffres:
$ echo "1. numberedlist 2. one 3. two look ma no digit line 55. fifty-five" | awk '/^[[:digit:]]+\. /{$1="#"} 1' # numberedlist # one # two look ma no digit line # fifty-five
Mais si vous voulez sed
:
$ echo "1. numberedlist 2. one 3. two look ma no digit line 55. fifty-five" | sed 's/^[[:digit:]][[:digit:]]*\. /# /' # numberedlist # one # two look ma no digit line # fifty-five