![변수를 유지하려면 파일 이름에서 문자열을 제거하시겠습니까?](https://linux55.com/image/64885/%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%9C%A0%EC%A7%80%ED%95%98%EB%A0%A4%EB%A9%B4%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%97%90%EC%84%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
다음과 같은 파일 목록이 있습니다.
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
명령 대체 모드 입니다 .