![bash 내의 긴 파일 목록에서 [tr][tr]{X}를 [tr][tr]{\tinyX}로 변경하시겠습니까?](https://rvso.com/image/164480/bash%20%EB%82%B4%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는 10진수(숫자 및 "." 모음)를
[tr][tr]{\tinyX}
.
어떤 아이디어가 있나요?
감사해요
답변1
GNU에 접근할 수 없다면 ( GNU가 실제로 빌린) sed
다음을 사용할 수도 있습니다 :perl
-i
sed
find . -type f -exec perl -Tpi -e 's/\Q[tr][tr]{\E\K[\d.]+\}/\\tiny$&/g' {} +
답변2
sed
전역 교체 패턴을 사용하는 GNU에서는 다음과 같습니다 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