Kullanırken sed
, genellikle bir dosyada iki kez eşleşmem gereken oldukça karmaşık ve karmaşık regex'ler oluştururum. Bu normal ifadeyi kaydetmenin ve sadece iki kez referans almamın bir yolu var mı?
Belki de buna benzeyen bir şey?
sed ' complicated_regex=/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+$/
s/complicated_regex:complicated_regex/simple-output/
' my_file
Güncelleme: Bir cevap bash değişkeni kullanma çözümünü sundu. Bu işe yaramıyor. Verilen a test.txt
.
#test.txt
foo bar
bar foo
Ve senaryo
#!/bin/bash
VALUE='foo \([a-z]\+\)'
sed 's/"${VALUE}"/foo happy \1/' test.txt
Bu çıktıyı üretmelidir
foo happy bar
bar foo
Ama bunun yerine hatayı alıyorum
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