를 사용할 sed
때 파일에서 두 번 일치 해야하는 다소 복잡하고 복잡한 정규 표현식을 종종 만듭니다. 이 정규식을 저장하고 두 번 참조하는 방법이 있습니까?
아마도 이런 모양일까요?
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에 너무 복잡한 것을 발견하면 망설이지 말고 awk 또는 perl을 찾으십시오.
—
Gilles 'SO- 악의를 멈춰라'
@Cory : 구문이 맞다면 예제가 잘 작동합니다. 당신은 "$ 변수"아직 ... 그것이 있어야 예상 쉘 확장에서 가죽을 '작은 따옴표'에 동봉
—
Peter.O
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