아래와 같이 디렉토리에 파일 세트가 있으며 마지막 밑줄이 발생한 후 문자열을 제거하고 싶습니다. 매번 끈이 다른 경우가 있습니다. 으로 할 수 있다면 좋을 것입니다 sed
.
입력 파일 :
com_101_00000_0001_a234.txt
com_101_retail_00000_0002_g345.ctl
com_101_lines_003_0002_1134.txt
결과 파일 이름 :
com_101_00000_0001.txt
com_101_retail_00000_0002.ctl
com_101_lines_00003_0002.txt
시스템에 perl rename
이 있으면 다음을 수행 할 수 있습니다.
rename -n 's/_[^_]+?\././' *
파일이 같은 이름으로 끝날 수있는 경우 덮어 쓰지 않으려면 -i
다음을 사용하십시오 .
rename -in 's/_[^_]+?\././' *
예상대로 작동하는 경우 -n
실제로 파일 이름을 바꾸려면를 제거하십시오 .
만약 당신이 정말로 sed
이것 에 구두 주걱 을 고집한다면 , 다음과 같이 불필요하게 복잡한 일을 할 수 있습니다 :
for f in *_*.*; do
new=$(printf "%s\n" "$f" | sed 's/\(.*\)_[^_]*\(\.[^_]*\)$/\1\2/')
echo mv "$f" "$new"
done
또는,없는 sed
경우 :
for f in *_*.*; do echo mv "$f" "${f%_*}.${f##*.}" ; done
마지막 두 예 모두 예상대로 작동하는 경우를 제거하여 echo
실제로 파일 이름을 바꿉니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다