"리눅스 파일 특정 행 내용 교체"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight))
 
(사용자 2명의 중간 판 10개는 보이지 않습니다)
4번째 줄: 4번째 줄:


==전체 교체==
==전체 교체==
===방법 1: sed===
===방법 1: sed ===
;명령어
{{소스헤더|명령어}}
<source lang='bash'>
<syntaxhighlight lang='bash'>
sed -i "행번호s/.*/새문자열/g" 파일명
sed -i "행번호s/.*/새문자열/g" 파일명
</source>
</syntaxhighlight>


;실행예시
{{소스헤더|실행예시}}
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@localhost ~]# cat test.txt
[root@localhost ~]# cat test.txt
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
21번째 줄: 21번째 줄:
HELLO TOAST
HELLO TOAST
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
</source>
</syntaxhighlight>


===방법 2: awk===
===방법 2: awk===
;명령어
{{소스헤더|명령어}}
<source lang='bash'>
<syntaxhighlight lang='bash'>
awk 'NR==행번호{$0="새문자열"}1' 원본파일 > 새파일
awk 'NR==행번호{$0="새문자열"}1' 원본파일 > 새파일
</source>
</syntaxhighlight>
:→ (주의) 원본파일에 그대로 저장하는 것은 불가능. 즉, 원본파일명과 새파일명이 같으면 파일 내용이 비워진다.
:→ (주의) 원본파일에 그대로 저장하는 것은 불가능. 즉, 원본파일명과 새파일명이 같으면 파일 내용이 비워진다.


;실행예시
{{소스헤더|실행예시}}
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@localhost ~]# awk 'NR==2{$0="HELLO TOAST"}1' test.txt > test2.txt
[root@localhost ~]# awk 'NR==2{$0="HELLO TOAST"}1' test.txt > test2.txt
[root@localhost ~]# cat test2.txt
[root@localhost ~]# cat test2.txt
37번째 줄: 37번째 줄:
HELLO TOAST
HELLO TOAST
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
</source>
</syntaxhighlight>


==일부 교체==
==일부 교체==
===방법 1: sed===
===방법 1: sed ===
;명령어 (1건)
{{소스헤더|명령어 (1건)}}
<source lang='bash'>
<syntaxhighlight lang='bash'>
sed -i "행번호s/기존문자열/새문자열/" 파일명
sed -i "행번호s/기존문자열/새문자열/" 파일명
</source>
</syntaxhighlight>
;명령어 (여러 건)
{{소스헤더|명령어 (여러 건)}}
<source lang='bash'>
<syntaxhighlight lang='bash'>
sed -i "행번호s/기존문자열/새문자열/g" 파일명
sed -i "행번호s/기존문자열/새문자열/g" 파일명
</source>
</syntaxhighlight>


;실행예시 (1건)
{{소스헤더|실행예시 (1건)}}
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@localhost ~]# sed -i "2s/TEST/TOAST/" test.txt
[root@localhost ~]# sed -i "2s/TEST/TOAST/" test.txt
[root@localhost ~]# cat test.txt
[root@localhost ~]# cat test.txt
57번째 줄: 57번째 줄:
TOAST1 TEST2 TEST3 TEST4
TOAST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
</source>
</syntaxhighlight>
:→ 2행 내용 중 최초 1건만 바뀜


;실행예시 (여러 건)
{{소스헤더|실행예시 (여러 건)}}
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@localhost ~]# sed -i "2s/TEST/TOAST/g" test.txt
[root@localhost ~]# sed -i "2s/TEST/TOAST/g" test.txt
[root@localhost ~]# cat test.txt
[root@localhost ~]# cat test.txt
66번째 줄: 67번째 줄:
TOAST1 TOAST2 TOAST3 TOAST4
TOAST1 TOAST2 TOAST3 TOAST4
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
</source>
</syntaxhighlight>
:→ 2행 내용 중 TEST 문구가 모두 바뀜


===방법 2: awk===
===방법 2: awk===
;명령어
{{소스헤더|명령어}}
<source lang='bash'>
<syntaxhighlight lang='bash'>
awk 'NR==행번호{$컬럼번호="새문자열"}1' 원본파일 > 새파일
awk 'NR==행번호{$컬럼번호="새문자열"}1' 원본파일 > 새파일
</source>
</syntaxhighlight>
:→ (주의) 원본파일에 그대로 저장하는 것은 불가능. 즉, 원본파일명과 새파일명이 같으면 파일 내용이 비워진다.
:→ (주의) 원본파일에 그대로 저장하는 것은 불가능. 즉, 원본파일명과 새파일명이 같으면 파일 내용이 비워진다.


;실행예시
{{소스헤더|실행예시}}
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@localhost ~]# awk 'NR==2{$3="HELLO TOAST"}1' test.txt > test2.txt
[root@localhost ~]# awk 'NR==2{$3="HELLO TOAST"}1' test.txt > test2.txt
[root@localhost ~]# cat test2.txt
[root@localhost ~]# cat test2.txt
82번째 줄: 84번째 줄:
TEST1 TEST2 HELLO TOAST TEST4
TEST1 TEST2 HELLO TOAST TEST4
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
</source>
</syntaxhighlight>
:→ 2행 3번째 컬럼을 HELLO TOAST로 변경
:→ 2행 3번째 컬럼을 HELLO TOAST로 변경


==같이 보기==
==같이 보기==
*[[리눅스 crontab 특정행 주석처리]]
*[[리눅스 파일 특정 행 보기]]
*[[리눅스 파일 특정 행 보기]]
*[[행번호]]
*[[행번호]]
91번째 줄: 94번째 줄:
*[[awk]]
*[[awk]]


==참고 자료==
==참고==
*http://www.daniweb.com/software-development/shell-scripting/threads/127755/replacing-string-in-nth-line
*http://www.daniweb.com/software-development/shell-scripting/threads/127755/replacing-string-in-nth-line



2020년 11월 2일 (월) 02:39 기준 최신판

replacing string in Nth line
리눅스 파일 특정 행 내용 교체
n번째 행 내용 바꾸기

1 전체 교체[ | ]

1.1 방법 1: sed ★[ | ]

명령어
sed -i "행번호s/.*/새문자열/g" 파일명
실행예시
[root@localhost ~]# cat test.txt
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
[root@localhost ~]# sed -i "2s/.*/HELLO TOAST/g" test.txt
[root@localhost ~]# cat test.txt
TEST1 TEST2 TEST3 TEST4
HELLO TOAST
TEST1 TEST2 TEST3 TEST4

1.2 방법 2: awk[ | ]

명령어
awk 'NR==행번호{$0="새문자열"}1' 원본파일 > 새파일
→ ※(주의) 원본파일에 그대로 저장하는 것은 불가능. 즉, 원본파일명과 새파일명이 같으면 파일 내용이 비워진다.
실행예시
[root@localhost ~]# awk 'NR==2{$0="HELLO TOAST"}1' test.txt > test2.txt
[root@localhost ~]# cat test2.txt
TEST1 TEST2 TEST3 TEST4
HELLO TOAST
TEST1 TEST2 TEST3 TEST4

2 일부 교체[ | ]

2.1 방법 1: sed ★[ | ]

명령어 (1건)
sed -i "행번호s/기존문자열/새문자열/" 파일명
명령어 (여러 건)
sed -i "행번호s/기존문자열/새문자열/g" 파일명
실행예시 (1건)
[root@localhost ~]# sed -i "2s/TEST/TOAST/" test.txt
[root@localhost ~]# cat test.txt
TEST1 TEST2 TEST3 TEST4
TOAST1 TEST2 TEST3 TEST4
TEST1 TEST2 TEST3 TEST4
→ 2행 내용 중 최초 1건만 바뀜
실행예시 (여러 건)
[root@localhost ~]# sed -i "2s/TEST/TOAST/g" test.txt
[root@localhost ~]# cat test.txt
TEST1 TEST2 TEST3 TEST4
TOAST1 TOAST2 TOAST3 TOAST4
TEST1 TEST2 TEST3 TEST4
→ 2행 내용 중 TEST 문구가 모두 바뀜

2.2 방법 2: awk[ | ]

명령어
awk 'NR==행번호{$컬럼번호="새문자열"}1' 원본파일 > 새파일
→ (주의) 원본파일에 그대로 저장하는 것은 불가능. 즉, 원본파일명과 새파일명이 같으면 파일 내용이 비워진다.
실행예시
[root@localhost ~]# awk 'NR==2{$3="HELLO TOAST"}1' test.txt > test2.txt
[root@localhost ~]# cat test2.txt
TEST1 TEST2 TEST3 TEST4
TEST1 TEST2 HELLO TOAST TEST4
TEST1 TEST2 TEST3 TEST4
→ 2행 3번째 컬럼을 HELLO TOAST로 변경

3 같이 보기[ | ]

4 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}