목록에 있는 파일에서 확장명 제거

목록에 있는 파일에서 확장명 제거

파일이 포함된 "file.list" 목록이 있습니다 .bed. .bed"file.list" 파일에서 확장자를 제거하고 싶습니다.

나는 그것을 시도했지만 sed -i 's/.bed//g' file.list작동하지 않습니다.

답변1

file.list설명하는 방식으로 파일 내용을 변경하려면 다음을 수행하십시오.

sed 's/\.bed *$//' file.list >file.list.tmp && mv file.list.tmp file.list

이는 모든 구현에 적용됩니다 sed( -i명령줄 플래그는 구현 간에 이식 가능하지 않은 것으로 악명이 높습니다 sed). 결과를 임시 파일에 쓰고 오류가 발생하지 않으면(예: 디스크 공간 부족) 원본 파일이 이 임시 파일로 대체됩니다.

이 표현식은 각 줄의 끝에서 문자열을 제거합니다 s/\.bed *$//. .bed또한 후행 공백도 허용됩니다(이 역시 제거됩니다).


실제 이름 바꾸기문서한 줄에 하나의 파일 이름을 가정하여 에 나열됩니다 file.list.

while IFS= read -r name; do
    echo mv "$name" "${name%.bed}"
done <file.list

이렇게 하면 echo이름 변경이 실제로 발생하는 것을 방지할 수 있습니다. 먼저 해당 위치에서 한 번 실행하여 작동하는지 확인해야 합니다.

변수 대체는 ${name%.bed}값 끝(읽은 줄)에서 제거됩니다..bed$namefile.list

답변2

제가 보기에는 file.list에 파일 목록이 있고 해당 파일의 이름을 .bed 접미사로 바꾸고 실제 파일에서 제거하기만 원하는 것 같습니다.

xargs -d'\n' -a file.list rename -n 's/\.bed$//'

관련 정보