클라우드/BashShell

고급 명령어

고고잉 2023. 2. 28. 22:14

CUT (awk의 하위 호환)
: 간결한 문법으로 파일에서 문자열 필드를 뽑아내는 명령

SED
: 텍스트 입력 스트림을 받아 출력을 제어할 수 있는 명령
장점
한줄 만큼의 메모리를 사용하여 메모리가 적게 들어 빠르게 처리 가능
단점
라인단위로 처리되어 지나간 라인에 대해 처리가 불가능하다.
sed 옵션 문자열처리_스크립트 파일명
-
옵션
- e : 입력을 처리하는 하나의 처리 명령을 의미 , 여러번 지정하여 여러번의 처리가 가능
- f file : 사전에 명령을 추가한 파일을 지정하여 명령을 수행
- n : 각 명령의 결과를 화면에 출력하지 않고 print 명령을 대기
- r : 확장된 정규표현식을 사용
-
문자열처리 명령어


echo "이것은 테스트입니다." | sed 's/테스트/test/'

s/소스패턴/결과패턴
[root@localhost ~]# cat data.txt
1. it is test
2. it is test
3. it is test
4. it is test
5. it is test
6. it is test
7. it is test

[root@localhost ~]# sed 's/test/sed test/' data.txt
1. it is sed test
2. it is sed test
3. it is sed test
4. it is sed test
5. it is sed test
6. it is sed test
7. it is sed test
->치환하는 명령어를 사용하여 단어가 치환된 상태로 출력

[root@localhost ~]# cat data.txt
1. it is test
2. it is test
3. it is test
4. it is test
5. it is test
6. it is test
7. it is test
->  파일을 읽어서 화면에 출력하는 부분만 관여하기 때문에 원본파일은 그대로 있다.

[테스트라인 - 범위] s/소스패턴/결과패턴
[root@localhost ~]# sed '3,5s/test/sed test/' data.txt
1. it is test
2. it is test
3. it is sed test
4. it is sed test
5. it is sed test
6. it is test
7. it is test
-> 3번째 줄에서 5번째 줄까지만 변경됨

[테스트라인 -범위]/d
[root@localhost ~]# sed '3,5d' data.txt
1. it is test
2. it is test
6. it is test
7. it is test
-> 3번부터 5번까지 삭제

sed 사용할 때는 원본파일에 저장하면 에러가남
-> 출력을 리다이렉트를 사용하여 파일을 쓰거나 sed에 w플래그를 사용하여 쓸수 있다.
[root@localhost ~]# sed 's/test/sed tset/w data2.txt' data.txt
1. it is sed tset
2. it is sed tset
3. it is sed tset
4. it is sed tset
5. it is sed tset
6. it is sed tset
7. it is sed tset

or

[root@localhost ~]# cat data2.txt
1. it is sed tset
2. it is sed tset
3. it is sed tset
4. it is sed tset
5. it is sed tset
6. it is sed tset
7. it is sed tset

-e 명령어 사용
[root@localhost ~]# sed -e 's/test/sed test/; s/is/is not/' date.txt <-- ;를 이용해서 구분하여 치환
1. it is not sed test
2. it is not sed test
3. it is not sed test
4. it is not sed test
5. it is not sed test
6. it is not sed test
7. it is not sed test

-n 옵션과 p플래그
[root@localhost ~]# sed -n 's/test/sed test/' date.txt
-> n옵션만 사용할 경우 출력 X
[root@localhost ~]# sed -n 's/test/sed test/p' date.txt
-> p플래그를 붙혀주면 출력O
1. it is sed test
2. it is sed test
3. it is sed test
4. it is sed test
5. it is sed test
6. it is sed test
7. it is sed test

-f 옵션
vi two.sed
s/test/sed tset/
s/is/is not/
위와같은 파일을 만들고
sed -f two.sed data.txt 명령어 입력하면 치환된 상태로 출력됨

[root@localhost] sed -n '/^3/p' date.txt
3. it is test
-> 정규표현식 사용하여 출력

AWK
: sed기능 + 변수/함수/연산자를 사용하여 필요한 데이터를 제어할 수 있는 프로그램이 가능한 명령
awk 옵션 읽어들일_파일명
-F 필드구분자 : 필드(각각의 항목)를 구분하기 위한 구분자를 지정
-f 파일이름 : awk프로그램이 읽어들일 파일 이름을 지정
-변서 =변수값 : awk프로그램에서 사용할 변수를 지정

awk '{print $1}' txt13  
-> 첫번째 필드는 $1
awk '{print $1}' txt13 | grep ccc 
-> ccc만 출력
awk '/ccc/ {print $1}' txt13 
-> grep사용하지 않고 ccc만 출력
grep 111 txt13 | awk '{print S3}' 
-> grep사용하여 111이 있는 줄을 찾아서 세번째 필드값(zzz)을 출력
awk '/111/ {print $3}' txt13 
-> grep사용 하지 않고 111이 있는 줄을 찾아서 세번째 필드값(zzz)을 출력
awk -F: '{print $1}' colon_txt13 
-> 구분자 :를 기준으로 출력

[root@localhost ~]# uptime | awk -Faverage: '{print $2}'
 0.01, 0.02, 0.00
[root@localhost ~]# uptime | awk -Faverage: '{print $1}'
 22:06:53 up  2:40,  0 users,  load
-> 특수 기호 뿐만 아닌 문자도 구분자가 될 수 있다.



정규표현식
: 텍스트의 패턴을 특수문자 등을 사용하여 표현한 것


ls -1 a*
ls -1 | grep ^ a
ls -al txt[0-9]  <- [ ] 하나당 한 문자
ls -al txt[0-9]^[0-9]      (자꾸옵션지정돼서 ^ 써놓음 실제 사용할 때는 빼고쓰기 )
find . -type f -iname "t*" 
iname : 정규표현식 인식