이름을 공백으로 바꾸는 sed 명령 사용법

이름을 공백으로 바꾸는 sed 명령 사용법

나는 많은 수의 파일을 가지고 있는데 그 중 일부는 실제 파일 이름 앞에 이름이 붙어 있습니다. 질문의 예는 다음과 같습니다.

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.

관련 정보