ed와 sed
ed
- ed : line editior
- a : append
- . & enter : end of editing
- w : writing
- q : quit
- 1i : 1번 행 앞에 insert
- ,p or %p : print
- wq : write, quite
- %s/기존 문자열/변경 문자열/g : 기존 문자열을 변경 문자열로 바꾼다.
- stream으로 처리하는 기능이 부족 -> sed의 기능 필요
obo@obo-900X3L:~/Github/happyOBO.github.io$ ed test.c > test.c: No such file or directory a #include <stdio.h> . w > 19 q obo@obo-900X3L:~/Github/happyOBO.github.io$
sed
- text filter로서의 특징
- 가볍고 빠른 교체 기능 제공
- 복수의 cmd
sed -e 'cmd1' -e 'cmd2' ... input_file [file ...]
-n
: 결과 행의 출력이 print 관련 명령을 만날 때 출력-e
: expression script (1개인 경우는 생략 가능)
- substitute
sed -e 's/root/adminstor/g' /etc/passwd
:root
를adminstor
로 바꾼다. , 여기서g
는 글로벌 옵션으로 한행의 같은 단어가 여러번 나와도 계속해서 교체하라는 뜻!
cat /etc/passwd | sed -n -e '1s/root/administor/g' -e '1,3s/nologin/disabled/g' -e '1,5p' #s 앞에 숫자를 넣으면 범위 연산이 가능하다.
- sed cmd
a<text>
: 선택된 행 뒤에 text 추가c<ch_text>
: 선택된 행을 ch_text로 교체d
: 선택된 행을 삭제g
: 현재 행을 버퍼의 내용으로 삭제r<file>
: 파일을 읽어들임s/old/new/func
: old를 검색하여 new로 교체func
:g(global)
,p(print)
,w(write)
,n(1~512정수)
y/old/new
: old를 new로 교체, 단, 길이가 같아야한다.=
: 현재 입력행의 번호를 표준 출력으로 인쇄!sed_cmd
: 패턴에 부합하지 않거나 범위로 지정되지 않은 행에 대해 sed_cmd 수행/REGEX/
: range 선택시 정규 표현식 사용
sed 'nologin$/cNO_LOGIN_USER' /etc/passwd # nologin 이 있는 행 자체를 NO_LOGIN_USER로 바꿔라
sed 's/ */ /g' infile # 복수의 공백을 1개의 공백으로 치환 sed '/^$/d' infile # 공백 라인의 제거
- CLI option
- -r : use extened regular expressions in the script.
- z : separate lines by NUL
-
BRE vs ERE
# BRE curl -s https://www.naver.com | sed -n "s,<\a\|A\) [^<>]\+>\(.\+\)</\1>,\2,gp" ..... # ERE curl -s https://www.naver.com | sed -r -n "s,(a|A) ]^<>]+>(.+)</\1>,\2,gp" ...
what is awk?
- 공식적으로 패턴 검색과 처리언어라고 정의
- 독자적인 처리 문법과 언어 구성을 갖추고 있음
- expr, grep, sed의 모든 기능을 포함하고 있으며, field 처리 가능
- grep, sed로 처리가 불가능하다면 awk 사용을 검토!
- 텍스트 처리를할 때 사용한다.
BEGIN, End
BEGIN {print "Pi (numerical integration method)" }
END