나는 많은 수의 파일을 가지고 있는데 그 중 일부는 실제 파일 이름 앞에 이름이 붙어 있습니다. 질문의 예는 다음과 같습니다.
Nora Hmann - sub-01.zip
Nora Hmann - sub-02.zip
Nora Hmann - sub-03.zip
Nora Hmann - sub-04.zip
Nora Hmann - sub-05.zip
Nora Hmann - sub-06.zip
Nora Hmann -
이제 sed 명령을 사용하여 삭제 하고 유지하고 싶습니다 sub-01.zip
. 대체할 문자열에 공백이 포함되어 있고 sed가 이를 올바르게 실행하지 않기 때문에 누구든지 sed 명령을 도와줄 수 있습니까?
답변1
이 이름 목록의 마지막 공백 뒤의 접미사를 제거하세요.
sed 's/.* //'
그러나 디렉토리에 여러 파일이 있으면 사용하기가 더 쉽습니다 rename
.
rename 's/^.* //' *
답변2
다음 명령을 사용하십시오.
sed -ie "s/Nora\ Hmann\ \-\ //g" stack
앞으로:
Nora Hmann - sub-01.zip
Nora Hmann - sub-02.zip
Nora Hmann - sub-03.zip
Nora Hmann - sub-04.zip
Nora Hmann - sub-05.zip
Nora Hmann - sub-06.zip
뒤쪽에:
sub-01.zip
sub-02.zip
sub-03.zip
sub-04.zip
sub-05.zip
sub-06.zip
이를 반복하려면(수정하려는 모든 파일이 있는 디렉터리에서 bash 스크립트를 실행한다고 가정합니다):
for i in `ls -w1`
do
sed -ie "s/Nora\ Hmann\ \-\ //g" /path/to/$i
done
답변3
및를 사용하는 cut
또 다른 솔루션은 다음과 sed
같습니다.
cat filename.txt | cut -d'-' -f2- | sed 's/^ //g'
다른 하나는 다음만 포함합니다 cut
(이름이 공백으로 구분된 이름과 성으로 구성된 경우에만).
cat filename.txt | cut -d' ' -f4-
답변4
두 번째 것을 잃어도 괜찮다면 -
다른 해결책은 다음을 사용하는 것입니다.tr
:
x='Nora Hmann - sub-01.zip'
printf '%s\n' "$x" | tr -d 'NoraHmn -'
sub01.zip
이는 "NoraHmn -" 세트의 문자가 와 교차하지 않는다는 사실에 의존합니다 sub*.zip
.