sed를 사용하여 구성 파일을 편집하려고 합니다. 바꾸고 싶은 라인이 몇 개 있습니다. Linux에서는 내부 편집이 허용된다는 것을 알고 있지만 sed -i
백업 파일에 저장해야 합니다. 그러나 백업 파일이 여러 개 있는 것을 피하고 모든 변경 사항을 한 번에 적용하고 싶습니다.
이를 수행할 수 있는 방법이 있습니까, sed -i
아니면 더 나은 옵션이 있습니까?
답변1
반복하여(또는 스크립트가 파일에 있는 경우) 여러 작업을 수행할 수 있습니다 sed
.-e
-f
sed -i -e 's/a/b/g' -e 's/b/d/g' file
in-place 라는 단일 파일에서 두 가지를 모두 변경합니다 file
. 백업 파일이 없습니다.
sed -ibak -e 's/a/b/g' -e 's/b/d/g' file
in-place 라는 단일 파일에서 두 가지를 모두 변경합니다 file
. 라는 이름을 사용하세요 filebak
.
답변2
여러 옵션을 사용하는 것 외에도 -e
줄 바꿈이나 세미콜론을 사용하여 단일 sed 스크립트 내에서 sed 명령을 구분할 수 있습니다.
이는 스크립트가 명령줄의 단일 행이든 스크립트 파일이든 마찬가지입니다.
예를 들어
sed -e 's/a/b/g ; s/b/d/g' file
주변 공백 문자는 ;
선택 사항입니다. 여기서는 세미콜론이 눈에 띄도록 사용하고 있습니다. 일반적으로 명령 사이의 공백은 명령을 구분하는 개행 문자를 제외하고는 무시됩니다. 그러나 명령 내의 공백은 중요할 수 있고 종종 중요하다는 점을 잊지 마십시오.
또는:
sed -e 's/a/b/g
s/b/d/g' file
답변3
또 다른 옵션은 이전에 .it ex
로 알려진 옵션 입니다. 실제로는vi
이것내부 스크립트 파일 편집을 위해 선호되는 POSIX 도구입니다. Perl보다 유연하고 sed -i
Perl보다 이식성이 훨씬 뛰어납니다. (Windows 세계에서 멀리 떨어져 있다면,틀림없이Perl보다 이식성이 뛰어납니다. )
ex
적어도 , 및 Perl을 많이 사용하는 것과 비교하면 sed
이 Stack Exchange에서 사용되는 샘플 명령이 상대적으로 부족합니다 awk
. 그러나 나는 나 자신을 탐구했다.POSIX 사양ex
나는 그 이후로 그것을 응원해 왔습니다. 나는 ex
여기와 vi/Vim 스택 교환에 많은 답변을 썼습니다:
- 패턴 매칭 후 위 5줄, 아래 4줄 삭제
- 파일에서 특정 패턴이나 문자열 뒤의 모든 항목을 제거하는 방법은 무엇입니까?
- 파일의 모든 줄을 grep하고 패턴 일치 지점에서 파일로 줄을 씁니다.
- OS X의 폴더에 있는 모든 .php 파일의 문자를 바꾸는 방법은 무엇입니까?
- 파일 끝이 아직 존재하지 않는 경우에만 파일 끝에 일부 줄을 추가하는 방법은 무엇입니까?
추가 자료: