다음과 같은 파일 목록이 있습니다.
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
명령 대체 모드 입니다 .