![bash의 긴 파일 목록에서 [tr][tr]{X}를 [tr][tr]{\tinyX}로 변경하시겠습니까?](https://linux55.com/image/164480/bash%EC%9D%98%20%EA%B8%B4%20%ED%8C%8C%EC%9D%BC%20%EB%AA%A9%EB%A1%9D%EC%97%90%EC%84%9C%20%5Btr%5D%5Btr%5D%7BX%7D%EB%A5%BC%20%5Btr%5D%5Btr%5D%7B%5CtinyX%7D%EB%A1%9C%20%EB%B3%80%EA%B2%BD%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
여기 초보자입니다. 폴더의 모든 파일에 대해 다음 순서를 대체할 bash 스크립트를 작성하려고 합니다.
[tr][tr]{X}
여기서 X는 소수(숫자 집합 및 "."), 여기서 ” 컬렉션)입니다
[tr][tr]{\tinyX}
.
어떤 아이디어가 있나요?
감사해요
답변1
GNU에 액세스할 수 없다면 sed
다음을 사용할 수도 있습니다 perl
(실제로는 -i
GNU 에서 빌려옴 sed
).
find . -type f -exec perl -Tpi -e 's/\Q[tr][tr]{\E\K[\d.]+\}/\\tiny$&/g' {} +
답변2
GNU는 sed
전역 대체 모드를 사용합니다 s/regexp/replacement/g
.
sed -i'' 's/\(\[tr\]\[tr\]{\)\([0-9.]\+}\)/\1\\tiny\2/g' /path/to/folder/*
이는 한 세트의 문자열을 캡처 [tr][tr]{
하고 X
하나 이상의 숫자 또는 ( 대괄호 안의 문자와 한 번 이상 일치하는 대괄호 표현식)을 포함 .
하고 두 번째 세트로 끝나고 일치하는 부분을 첫 번째 세트로 대체합니다 . 두 번째 그룹 라인. 그룹 대괄호, 리터럴 대괄호 및 리터럴 백슬래시는 다른 백슬래시를 사용하여 이스케이프해야 합니다.[0-9.]\+
\+
}
\tiny
()
[]
+
\
이 프로그램을 실행하기 전에 데이터 폴더를 반드시 백업하십시오(또는 원본 파일을 로 두는 -i.back
대신 사용하십시오 ).-i''
filename.back