다른 파일을 생성하지 않고 파일 수정 [복제]

다른 파일을 생성하지 않고 파일 수정 [복제]

sed및 없이 다른 파일에 내용을 쓰지 않고 파일을 수정하는 방법이 있습니까 awk?

예를 들어:

$ cat test.txt
aaa
aaa
bbb
ccc
ddd

using을 옵션 sed으로 바꾸면 다음과 같은 결과가 생성됩니다.-ised -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라는 백업이 생성됩니다.

관련 정보