다음 형식의 변수를 포함하는 템플릿 파일 목록이 있습니다.
{{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 ).