첫째,이를 수행하는 가장 쉬운 방법은 prename 또는 rename 명령을 사용하는 것입니다.
Ubuntu, OSX (Homebrew 패키지 rename
, MacPorts 패키지 p5-file-rename
) 또는 perl 이름 변경 (사전 이름)이있는 기타 시스템 :
rename s/0000/000/ F0000*
또는 RHEL과 같이 util-linux-ng에서 이름을 바꾸는 시스템 :
rename 0000 000 F0000*
동등한 sed 명령보다 훨씬 이해하기 쉽습니다.
그러나 sed 명령을 이해하려면 sed 맨 페이지가 도움이됩니다. man sed를 실행하고 &를 검색하면 (/ 명령을 사용하여 검색) s / foo / bar / 대체에서 특수 문자임을 알 수 있습니다.
s/regexp/replacement/
Attempt to match regexp against the pattern space. If success‐
ful, replace that portion matched with replacement. The
replacement may contain the special character & to refer to that
portion of the pattern space which matched, and the special
escapes \1 through \9 to refer to the corresponding matching
sub-expressions in the regexp.
따라서에서 \(.\)
참조 할 수있는 첫 번째 문자와 일치합니다 \1
. 그런 .
다음 항상 0 인 다음 문자 \(.*\)
와 일치 합니다. 그런 다음에서 참조 할 수있는 나머지 파일 이름과 일치합니다 \2
.
대체 문자열은 &
(원래 파일 이름)을 사용하여 모든 것을 모으고 \1\2
두 번째 문자 인 0을 제외한 파일 이름의 모든 부분입니다.
이것은 IMHO를 수행하는 꽤 비밀스러운 방법입니다. 어떤 이유로 rename 명령을 사용할 수없고 sed를 사용하여 이름을 변경하려는 경우 (또는 이름 바꾸기에 너무 복잡한 작업을 수행 했습니까?) 정규식에서 더 명시 적으로 지정하면 훨씬 더 읽기 쉽습니다. 아마도 다음과 같습니다.
ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh
s / search / replacement /에서 실제로 변경되는 내용을 볼 수 있으면 훨씬 더 읽기 쉽습니다. 또한 실수로 두 번 또는 무언가를 실행하면 파일 이름에서 문자를 계속 빨아 들이지 않습니다.