점 뒤의 모든 항목을 제거하고 동일한 파일에 덮어씁니다.

점 뒤의 모든 항목을 제거하고 동일한 파일에 덮어씁니다.

아래와 비슷한 파일 내용

abc.w.f.com
asdff.d.f.com
..........

점 뒤의 모든 항목을 제거하고 변경 사항을 동일한 파일에 덮어써야 합니다.

abc
asdff

아래에서 시도했지만 다른 파일로 리디렉션해야 하는데 원하지 않습니다.

sed "s/\..*//" Filename  > File2

답변1

사용 -i:

sed -i 's/\..*$//' Filename

-i[SUFFIX], --in-place[=SUFFIX]
제자리에서 파일 편집(SUFFIX가 제공되면 백업 생성)

답변2

동일한 파일로 리디렉션할 수 없습니다. 명백한 문제는 에서 파일을 읽기 전에 sed "s/\..*//" Filename > Filename쉘이 쓰기 위해 열리고 덮어쓴다는 것입니다 .Filenamesed

출력을 다른 파일로 리디렉션하고 원본 파일을 삭제한 다음 새로 생성된 파일의 이름을 원본과 동일하게 바꿔야 합니다. Sed, Perl 및 AWK가 이 작업을 수행할 수 있습니다.

  • sed -i
  • perl -i
  • awk -i inplace

또는 다음을 사용할 수 있습니다 sponge.

  • sed "s/\..*//" Filename | sponge Filename

sponge표준 입력에서 받은 내용을 계속 버퍼링한 다음 Filename.

관련 정보