ในการใช้sed
ฉันมักจะสร้าง regexes ที่ค่อนข้างซับซ้อนและซับซ้อนซึ่งฉันต้องจับคู่สองครั้งในไฟล์ มีวิธีให้ฉันบันทึก regex นี้และเพียงแค่อ้างอิงสองครั้งหรือไม่
บางทีสิ่งที่มีลักษณะเช่นนี้?
sed ' complicated_regex=/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+$/
s/complicated_regex:complicated_regex/simple-output/
' my_file
อัปเดต: คำตอบนำเสนอวิธีการใช้ตัวแปร bash มันใช้งานไม่ได้ test.txt
ที่กำหนด
#test.txt
foo bar
bar foo
และสคริปต์
#!/bin/bash
VALUE='foo \([a-z]\+\)'
sed 's/"${VALUE}"/foo happy \1/' test.txt
สิ่งนี้ควรสร้างผลลัพธ์
foo happy bar
bar foo
แต่ฉันได้รับข้อผิดพลาดแทน
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