En utilisant sed
, je crée souvent des expressions régulières assez compliquées et complexes que je dois faire correspondre deux fois dans un fichier. Existe-t-il un moyen pour moi de sauvegarder cette expression régulière et de la référencer deux fois?
Peut-être quelque chose qui ressemble à ça?
sed ' complicated_regex=/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+$/
s/complicated_regex:complicated_regex/simple-output/
' my_file
Mise à jour: Une réponse a présenté la solution de l'utilisation d'une variable bash. Ça ne marche pas. Étant donné un test.txt
.
#test.txt
foo bar
bar foo
Et le script
#!/bin/bash
VALUE='foo \([a-z]\+\)'
sed 's/"${VALUE}"/foo happy \1/' test.txt
Cela devrait produire la sortie
foo happy bar
bar foo
Mais à la place, j'obtiens l'erreur
sed: -e expression #1, char 24: invalid reference \1 on `s' command's RHS
sed 's/'"${VALUE}"'/foo happy \1/' test.txt
perl -pe 's/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+:\1$/simple_output/' my_file