linux 텍스트 처리 삼 총사 grep sed awk 실전

8383 단어 shell
글 목록
  • grep sed awk 대비
  • grep
  • 1. 단일 일치 조회
  • 2. 여러 매 칭
  • 3. grep 결합 sed 추출 문자열
  • 3.1 본 컴퓨터 의 ip 주소 추출
  • 3.2 이미지 주소 추출
  • sed
  • 1. 특정 범위 의 줄 인쇄
  • 2. 루트 를 포함 하 는 줄 을 표시 하고 루트 는 대소 문 자 를 구분 하지 않 습 니 다
  • 3. 줄 삭제
  • 4. 삽입, 추가, 줄 바 꾸 기
  • 5. 문자열 바 꾸 기
  • 6. 문자열 교체 (원본 파일 수정)
  • awk
  • 1. 모호 조회
  • * * 2. 구분자 지정, 아래 표 시 된 내용 에 따라 * *
  • 3. 인쇄 할 구분자 지정
  • 4. 줄 용 awk 함수
  • 5. if 구문
  • 6. BEGIN END 필드 평균 값
  • grep sed awk 대비
    grep 는 특정 문자열 을 포함 하 는 줄 을 찾 는 데 사 용 됩 니 다.
    sed, awk 는 텍스트 를 처리 하 는 데 사 용 됩 니 다.
    awk 에서 C 문법 을 지원 하고 분기 조건 판단, 순환 문 등 이 있 으 며 소형 프로 그래 밍 언어 와 상당 합 니 다.
    grep
    1. 단일 일치 조회
    grep -e "zhang" score.txt
    

    2. 여러 개의 일치
    grep -e "zhang" -e "li" score.txt
    

    3. grep 결합 sed 추출 문자열
    추출 문자열 은 자주 사용 되 는 작업 입 니 다. grep 의 정규 표현 식 은 그룹 작업 을 지원 하지 않 기 때문에 sed 와 결합 하여 문자열 추출 을 해 야 합 니 다.
    grep 특정 줄 확인, sed 양쪽 삭제.
    3.1 이 컴퓨터 ip 주소 추출
    # 1.      
    ifconfig eth0 | grep "inet addr" #     : inet addr:192.168.100.201  Bcast:192.168.100.255  Mask:255.255.255.0
    # 2.     
    ifconfig eth0 | grep 'inet addr:' | sed -e 's/^.*addr://' | sed -e 's/ *Bcast.*$//' #      192.168.100.201
    

    3.2 이미지 주소 추출
    echo "background-image: url(/media/images/index/im2.jpg);"| sed -e 's/^.*url(//' | sed -e 's/).*$//'
    #    /media/images/index/im2.jpg
    

    사용 가능: grep - o
    - o: 일치 하 는 부분 만 표시 (grep 기본 줄 표시)
    echo "background-image: url(/media/images/index/im2.jpg);"| grep -o '/.*jpg'
    #    /media/images/index/im2.jpg
    

    sed
    sed 도 검색 에 사용 할 수 있 지만 필터 와 교체 등 간단 한 텍스트 편집 에 사 용 됩 니 다.
    명령 하 다.
    속뜻
    sed [OPTON] 대상 파일
    대상 파일 을 필터 하거나 교체 합 니 다.
    선택 가능 한 매개 변수
    옵션 가능
    속뜻
    p
    인쇄 하 다.
    d
    삭제
    I
    대소 문자 무시
    $
    대표 님 마지막 줄.
    -n
    처리 후 결과 만 표시
    -e
    표현 식 에 따라 처리 하 다
    1. 특정 범위 의 줄 인쇄
    head - n 은 앞 n 줄 을 출력 할 수 있 지만 특정 범위 의 줄 을 출력 할 수 없습니다.
    sed -ne '3,5p' 2.txt #   3~5 
    

    2. 루트 를 포함 하 는 줄 을 표시 하고 루트 는 대소 문 자 를 구분 하지 않 습 니 다.
    sed -ne '/root/Ip' 2.txt
    

    3. 줄 삭제
    sed -e '4, $d' 2.txt #   4    1 ,    
    

    4. 삽입, 추가, 줄 바 꾸 기
    원본 파일 수정 안 함
    매개 변수
    속뜻
    ni
    n 줄 앞 에 줄 삽입
    na
    n 번 째 줄 뒤에 추가 줄
    nc
    n 줄 바 꾸 기
    sed -e '1i iiiiii' 2.txt
    
    sed -e '2a aaaaaa' 2.txt
    
    sed -e '3c cccccc' 2.txt
    

    5. 문자열 바 꾸 기
    원본 파일 수정 안 함
    매개 변수
    속뜻
    s/oldString/newString/
    바꾸다
    6. 문자열 바 꾸 기 (원본 파일 수정)
    매개 변수 i 대표 원본 파일 내용 교체 추가
    #       
    cp 1.txt 2.txt_bak
    #         
    sed -ie 's/nologin/login/' 2.txt
    

    awk awk 를 통 해 모호 한 조 회 를 실현 할 수 있 고 필요 한 추출 필드 에 따라 판단 과 간단 한 연산 도 할 수 있다.
    1. 퍼 지 조회
    grep 는 하나의 정규 표현 식 을 통 해 여러 모드 와 일치 할 수 없 으 며, awk 는 가능 합 니 다.
    명령 하 다.
    속뜻
    awk ‘/zhang|li/’ score.txt
    zhang 이나 li 가 함 유 된 줄 검색
    #       
    [root@node01 export]# cat score.txt
    zhangsan 68 99 26
    lisi 98 66 96
    wangwu 38 33 86
    zhaoliu 78 44 36
    maq 88 22 66
    zhouba 98 44 46
    #      zhang   li      
    [root@node01 export]# cat score.txt | awk '/zhang|li/'
    zhangsan 68 99 26
    lisi 98 66 96
    zhaoliu 78 44 36
    

    2. 구분자 지정, 아래 표 시 된 내용 에 따라 표시
    grep 는 일반적으로 한 줄 을 표시 하 는 데 사용 되 지만, awk 는 줄 을 각 필드 로 나 눌 수 있 으 며, 필드 에 내용 을 표시 할 수 있 습 니 다.
    명령 하 다.
    속뜻
    awk -F ‘,’ ‘{prnt $1, $2, $3}’
    줄 을 쉼표 로 나 눈 후 1, 2, 3 번 필드 를 인쇄 합 니 다 ($0 은 줄 전 체 를 대표 합 니 다)
    cat score.txt
    zhangsan 68 99 26
    lisi 98 66 96
    wangwu 38 33 86
    zhaoliu 78 44 36
    maq 88 22 66
    zhouba 98 44 46
    cat score.txt | awk -F ' ' '{print $1,$2}'
    zhangsan 68
    lisi 98
    wangwu 38
    zhaoliu 78
    maq 88
    zhouba 98
    

    3. 인쇄 할 구분자 지정
    명령 하 다.
    속뜻
    awk -F ’ ’ ‘{OFS="\t"}{print $1, $2, $3}’ 1.txt
    1. txt 의 내용 을 빈 칸 으로 나 눈 후 탭 문 자 를 분할 문자 로 인쇄 합 니 다.
    OFS 옵션
    옵션 OFS =
    분할 부호
    문자
    문자
    \b
    스페이스 바
    \f
    페이지 를 바꾸다
    줄 을 바꾸다
    \r
    리 턴 카
    \t
    탭 문자
    4. 줄 용 awk 함수
    명령 하 다.
    속뜻
    awk -F ‘,’ ‘{print toupper($2)}’ 1.txt
    1. txt 에서 줄 마다 첫 번 째 필드 를 크기 로 변환 한 후 인쇄 합 니 다.
    5. if 구문
    명령 하 다.
    속뜻
    awk -F ‘{if($4>60) print $1, $4}’
    필드 4 가 60 이상 이면 인쇄 합 니 다.
    awk - F '{if ($4 > 60} print $1, "합격"; else print $1, "불합격"}
    필드 4 가 60 이상 이면 인쇄 에 합격 합 니 다. 그렇지 않 으 면 인쇄 에 합격 하지 못 합 니 다.
    기타 매개 변수
    매개 변수
    속뜻
    if($0 ~ “aa”) print $0
    이 줄 에 "aa"가 포함 되 어 있다 면 인쇄 합 니 다.
    if($1 ~ “aa”) print $0
    첫 번 째 필드 에 "aa"가 포함 되 어 있 으 면 인쇄 합 니 다.
    if($1 == “aa”) print $0
    첫 번 째 필드 가 "aa"와 같 으 면 인쇄 합 니 다.
    if 약자 도 생략 할 수 있 습 니 다.
    awk -F ' ' '$4>60 {print $0}' score.txt
    

    6. BEGIN END 필드 평균 값 구하 기
    명령 하 다.
    속뜻
    awk 'BEGIN {초기 화 작업} {줄 당 작업} END {끝 날 때 작업}' 파일 이름
    초기 화 작업 을 먼저 실행 하고 줄 마다 작업 을 수행 하 며 마지막 으로 끝 날 때 작업 을 수행 합 니 다.
    awk -F ' ' 'BEGIN{}{total = total + $4} END {print "ave: " (total / NR)}' score.txt
    #   : ave: 59.3333
    

    좋은 웹페이지 즐겨찾기