Khi sử dụng sed
, tôi thường tạo các biểu thức khá phức tạp và phức tạp mà tôi cần phải khớp hai lần trong một tệp. Có cách nào để tôi lưu regex này và chỉ cần tham khảo hai lần không?
Có lẽ một cái gì đó trông như thế này?
sed ' complicated_regex=/^(([a-f0-9]{32})+([a-zA-Z0-9=]{{$i}})?)+$/
s/complicated_regex:complicated_regex/simple-output/
' my_file
Cập nhật: Một câu trả lời đã trình bày giải pháp sử dụng biến bash. Điều này không hoạt động. Cho a test.txt
.
#test.txt
foo bar
bar foo
Và kịch bản
#!/bin/bash
VALUE='foo \([a-z]\+\)'
sed 's/"${VALUE}"/foo happy \1/' test.txt
Điều này sẽ tạo ra đầu ra
foo happy bar
bar foo
Nhưng thay vào đó tôi nhận được lỗi
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