sed
및 없이 다른 파일에 내용을 쓰지 않고 파일을 수정하는 방법이 있습니까 awk
?
예를 들어:
$ cat test.txt
aaa
aaa
bbb
ccc
ddd
using을 옵션 sed
으로 바꾸면 다음과 같은 결과가 생성됩니다.-i
sed -i 's/aaa/NNN/g' test.txt
NNN
NNN
bbb
ccc
ddd
awk
및 없이 무엇을 해야 합니까 sed
?
답변1
다음 스크립트를 사용할 수 있습니다 vi
.
$ vi test.txt -c '%s/aaa/NNN/ | wq'
$ cat test.txt
NNN
NNN
bbb
ccc
ddd
명령 모드에서 사용할 때 일반적으로 입력하는 내용을 자동화하면 됩니다 vi
(일반적으로 사용 Esc:).
%
- 각 줄에서 다음 명령을 실행합니다.
s/aaa/NNN/
- 다음 aaa
으로 교체NNN
|
- 명령 구분 기호
w
- 파일에 변경 사항 쓰기
q
- 사직하다
답변2
사용스펀지:
#!/bin/bash
pattern='aaa'
replacement='NNN'
while read -r line
do
printf '%s\n' "${line//$pattern/$replacement}"
done < "${1}"
부르다:
./script.sh test.txt | sponge test.txt
답변3
그리고ed
, 라인 편집기:
ed -s test.txt <<< $',s/pattern/replace/g\nw\nq'
또는
ed -s test.txt <<IN
,s/pattern/replace/g
w
q
IN
또는
printf '%s\n' ,s/pattern/replace/g w q | ed -s test.txt
답변4
펄을 사용할 수도 있습니다
perl -pi -e 's/aaa/bbb/g' file.txt
그러면 원하는 출력이 제공됩니다.
i.bak
자동 백업 대신 원본 파일을 사용할 수도 있습니다 i
. 그러면 file.txt.bak라는 백업이 생성됩니다.