변수를 유지하려면 파일 이름에서 문자열을 제거하시겠습니까?

변수를 유지하려면 파일 이름에서 문자열을 제거하시겠습니까?

다음과 같은 파일 목록이 있습니다.

Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.alleles.tsv
Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.matches.tsv
Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.snps.tsv
Dorn_Triatomine_A5201_sequence_1_unmappedforTdim_tdim.tags.tsv
Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.alleles.tsv
Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.matches.tsv
Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.snps.tsv
Dorn_Triatomine_T9252_sequence_1_unmappedforTdim_tdim.tags.tsv

중복된 문자열을 제거하고 파일 이름을 다음과 같이 바꾸고 싶습니다.

A5201_tdim.allele.tsv
A5201_tdim.matches.tsv
A5201_tdim.snps.tsv

나는 다음을 사용하려고합니다 :

mv Dorn_Triatomine_*_sequence_1_unmappedforTdim_tdim.tags.tsv *_tdim.tags.tsv 

이 작업을 수행하는 가장 쉬운 방법은 무엇입니까?

답변1

이 스크립트는 다음을 수행해야 합니다.

#!/bin/sh
for f in Dorn_Triatom* ; do
  mv "$f" `echo "$f" | sed -e 's/Dorn_Triatomine_//' -e 's/sequence_1_unmappedforTdim_//'`
done

답변2

grep새 파일 이름을 얻으려면 PCRE와 함께 사용하십시오 .

#!/bin/bash
for file in *.tsv; do
  newname="$(grep -Po '^[^_]*_[^_]*_\K[^_]*_'<<<"$file")$(grep -Po '.*_\K.*$' <<<"$file")"
  mv "$file" "$newname"
done 

newname두 가지 작업의 출력을 조합한 것입니다 grep.

  • grep -Po '^[^_]*_[^_]*_\K[^_]*_'<<<"$file"A5201_각 파일 이름에 대해 비슷한 문자열을 출력합니다.

  • $(grep -Po '.*_\K.*$' <<<"$file")파일 이름의 마지막 부분과 일치합니다._

  • $()bash명령 대체 모드 입니다 .

관련 정보