안녕하세요, 을(를) 삭제하려고 합니다 /
. .sh
현재 폴더에서 확장자를 가진 모든 파일을 찾은 다음 ./
이름 앞과 뒤의 파일을 삭제하면 이 확장자가 있는 파일 .sh
에 있어야 합니다. .sh
나는 중간이라고 이름을 붙였다 find_sh.sh
. 시도해 보았지만 find . -name '*.sh' -print | sed 's/[.]//g' | sed 's/[/]//g' | sed 's/.sh//g'
삭제됩니다 _
. 내가 뭘 잘못하고 있는 걸까요?
답변1
나는 이것을 해왔고 작동 find . -name '*.sh' -print | sed 's/[.]//g' | sed 's/[/]//g' | sed 's/sh//'
하고 작동합니다.
답변2
.
리터럴 포인트뿐만 아니라 패턴의 모든 문자를 일치시킵니다. 이런 일이 발생하지 않도록 하려면 백슬래시를 사용하여 이스케이프 처리해야 합니다. 당신의기타 솔루션반면에 파일 이름에서 모든 점을 제거하면 a.b.sh
다음 ab
대안을 제안합니다.
find . -name '*.sh' | sed 's,^./,,g' | sed 's/.sh$//'
^
어느 것이 줄의 시작 부분과 일치하고 $
어느 것이 줄의 끝과 일치하는지 확인하세요 .
하지만 다음 명령 하나만 사용하는 것이 더 좋습니다 sed
.
find . -name '*.sh' | sed 's,^./\(.*\).sh$,\1,'