여러 파일에서 변수 이름의 모든 문자 인스턴스를 바꿉니다.

여러 파일에서 변수 이름의 모든 문자 인스턴스를 바꿉니다.

다음 형식의 변수를 포함하는 템플릿 파일 목록이 있습니다.

{{my.var}}
{{my.other.var}}

각 인스턴스를 찾아서 각 변수가 다음과 같이 바뀌 .도록 바꿔야 합니다 _.

{{my_var}}
{{my_other_var}}

sed와 regex를 사용하여 이 작업을 시도했지만 변수에 마침표가 여러 개 있을 수 있다는 사실을 처리할 수 없습니다.

이것이 내가 지금까지 가지고 있는 것입니다:

for f in `cat list-of-files.txt`; do
    sed -i .bak -E 's/{{(.*)\.(.*)}}/{{\1_\2}}/g' ${f}
done;

이로 인해

{{my_var}}
{{my.other_var}}

답변1

또한 PERL을 사용하여 원하는 것을 달성하는 방법을 찾았습니다. 비결은 게으른 수정자를 사용하는 것입니다.

perl -pi.back -e 's|\{\{(\w+?)\.(\w+?)}}|{{\1_\2}}|g' <filename>

{{my.var}}은(는) {{my_var}}이 됩니다.

답변2

왜 다음과 같은 것이 아닌가?

echo "{{ my.other.var }}" | sed -n '/{{.*}}/{s/\./-/gp}'

결과:

{{ my-other-var }}

첫 번째 패턴 일치는 형식에 대해 수행된 다음 패턴이 충족되면 필요한 sed 명령이 실행됩니다(예: 대안 - for ).

관련 정보