Shell 스 크 립 트 의 작성, sed 의 사용 및 정규 표현 식

5633 단어
Shell 스 크 립 트 의 간단 한 작성 및 sed 사용
태그 (공백 구분): 블 로그 글
얼마 전에 웹 감사 규칙 을 대량으로 수정 하기 위해 Shell 스 크 립 트 를 작 성 했 습 니 다. 참고 로 sed 도 다시 배 웠 습 니 다. 정리 해 야 할 것 같 습 니 다. 그렇지 않 으 면 자신 에 게 떳떳 하지 못 할 것 같 습 니 다.
Shell
  • 변수
  • 셸 의 변 수 는 매우 약 하기 때문에 어떠한 유형 도 정의 할 필요 가 없다.
  • 변 수 는 할당 할 때 등호 양쪽 에 어떠한 = 도 남기 지 않 아야 합 니 다.
  • 변 수 는 사용 시 사용 가능 시작 부분 에서 사용 가능
  • if 조건 판단 우선 코드
    if [ ! -e "$website_dir" -o ! -e "$weblogin_dir" ]
    then
        echo "$website_dir    "
        echo "$weblogin_dir    "
    else
        ...
    fi
  • 여기 서 격식 문 제 를 중점적으로 지적 해 야 합 니 다. 초보 자 들 이 쉽게 만 날 수 있 습 니 다. $, if, then 은 반드시 한 줄 만 있어 야 합 니 다. 같은 줄 을 원한 다 면 else 으로 분리 하 십시오. 그렇지 않 으 면 잘못 보고 할 수 있 습 니 다. 또한 ; 뒤의 조건 상자 if 는 양 끝 에 빈 칸 을 남 겨 야 합 니 다. 매번 판단 옵션 이 있어 야 합 니 다.논리 기호 와 빈 칸 을 남 겨 야 합 니 다. 마지막 []
  • fi 조건 중의 각종 옵션 은 다른 검색엔진 에서 찾 을 수 있다
  • case 조건 선택
    case $1 in
        replace)
            ...
            exit 1;;
        restore)
            ...
            exit 1;;
        *)
            echo "replace:                "
            echo "restore:       ";;
    esac
  • if 은 실행 할 때의 첫 번 째 입력 매개 변 수 를 선택 하 는 것 을 말 합 니 다. 이곳 의 입력 매개 변 수 는 terminal 에서 출력 하 는 것 을 말 합 니 다. 여 기 는 고정 $1, $0:
  • Sed
    Sed 프로필
    sed 는 한 줄 의 내용 을 처리 하 는 온라인 편집기 입 니 다.처리 할 때 현재 처 리 된 줄 을 임시 버퍼 에 저장 하여 '패턴 공간' (pattern space) 이 라 고 부 릅 니 다. 이 어 sed 명령 으로 버퍼 의 내용 을 처리 하고 처리 가 완료 되면 버퍼 의 내용 을 화면 으로 보 냅 니 다.이 어 다음 줄 을 처리 하고 파일 이 끝 날 때 까지 반복 합 니 다.파일 내용 은 변경 되 지 않 았 습 니 다. 리 셋 저장 소 출력 을 사용 하지 않 는 한.Sed 는 주로 하나 이상 의 파일 을 자동 으로 편집 하 는 데 사 용 됩 니 다.파일 에 대한 반복 작업 간소화;변환 프로그램 작성 등.sed 텍스트 줄 처리 에 적합
    인 스 턴 스 결합 사용
    우선 sed 의 사용 형식 네트워크 에는 저 보다 상세 한 튜 토리 얼 이 있 습 니 다. 여러분 은 마음대로 구 글 을 할 수 있 습 니 다. 여 기 는 제 가 실제 적 으로 겪 은 비교적 까다 로 운 문제 만 을
    sed -i "/^[^#SUB].*WEBFORUM_/{s/\(.*\)CONTENT/\1REFERER=H24@P(7::),CONTENT/g}" $website_dir
  • 이 문장의 기능 은 한 텍스트 줄 에서 WEBFORUM 을 포함 하지만 $1: , #, S, U 로 시작 하 는 텍스트 줄 을 찾 은 다음 정규 표현 식 의 backreferences 방식 으로 교체 B 하 는 것 이다.이 문장 에서 CONTENT 뒤의 REFERER=H24@P(7::) 옵션 은 현재 텍스트 에서 바 뀌 었 음 을 나타 낸다.
  • sed 이 정규 표현 식 에서 -i 임의의 텍스트 를 표시 하고 {s/.../g} 첫 번 째 일치 하 는 텍스트 (즉 CONTENT) 를 교체 하 는 것 을 표시 합 니 다. 구체 적 인 backreferences 의 사용 은 참조 하 십시오.Classic Shell Scripting_의Regular Expressions_장절
  • sed -i "/^[^#SUB].*WEBFORUM_/{s/$/;[COMPOSE]=URL=REFERER/g}" $website_dir
    sed -i "s/^M//g" $website_dir
  • 이 문장의 기능 은 한 텍스트 줄 에서 WEBFORUM 을 포함 하지만 {}, {s/\(.*\)CONTENT/\1REFERER=H24@P(7::),CONTENT, \(.*\), \1 로 시작 하 는 텍스트 줄 을 찾 고 줄 끝 에 # 을 추가 하 는 것 이다. S 여기 서 줄 끝 을 표시 하 는데 주의해 야 할 문제 가 있다. 첫 번 째 문장 만 실행 할 때 끝 에 하나의 U 기호 가 더 나온다.이것 은 B 다음 줄 바 꿈 문자 입 니 다. 복사 과정 에서 ;[COMPOSE]=URL=REFERER 을 거 쳤 기 때문에 이 기 호 는 존재 합 니 다. 그러나 이 기 호 는 이 규칙 파일 의 해석 에 영향 을 줄 수 있 기 때문에 반드시 제거 해 야 합 니 다
  • .
    전체 코드
  • 비교적 민감 한 것 과 관련 되 기 때문에 경 로 는 일률적으로 $ 로 표시 한다
  • .
    #########################################################################
    # File Name: replace_web_site_rule.sh
    # Author: MarkWoo
    # mail: [email protected]
    # Created Time: 2015 03 24      09 59 58 
    #########################################################################
    #!/bin/bash
    
    website_dir='XXX/WebSite.rc'
    backup_website_dir='XXX/WebSite.rc.bak'
    weblogin_dir='XXX/weblogin_site.rc'
    backup_weblogin_dir='XXX/weblogin_site.rc.bak'
    
    if [ ! -e "$website_dir" -o ! -e "$weblogin_dir" ]
    then
        echo "$website_dir    "
        echo "$weblogin_dir    "
    else
        case $1 in
            replace)
                echo "         "
                touch $backup_website_dir
                touch $backup_weblogin_dir
                cat $website_dir > $backup_website_dir
                cat $weblogin_dir > $backup_weblogin_dir
                echo "        "
                sed -i "/^[^#SUB].*WEBFORUM_/{s/\(.*\)CONTENT/\1REFERER=H24@P(7::),CONTENT/g}" $website_dir
                sed -i "/^[^#SUB].*WEBFORUM_/{s/$/;[COMPOSE]=URL=REFERER/g}" $website_dir
                sed -i "s/^M//g" $website_dir
                sed -i "/^[^#SUB].*WEBFORUM_/{s/\(.*\)CONTENT/\1REFERER=H24@P(7::),CONTENT/g}" $weblogin_dir
                sed -i "/^[^#SUB].*WEBFORUM_/{s/$/;[COMPOSE]=URL=REFERER/g}" $weblogin_dir
                sed -i "s/^M//g" $weblogin_dir
                exit 1;;
            restore)
                if [ ! -e "$backup_website_dir" -o ! -e "$backup_weblogin_dir" ]
                then
                    echo "       "
                else
                    echo "          "
                    cat $backup_website_dir > $website_dir
                    cat $backup_weblogin_dir > $weblogin_dir
                fi
                exit 1;;
            *)
                echo "replace:                "
                echo "restore:       ";;
        esac
    fi

    최후 의 총화
    우선 ^M 은 강력 한 도구 로 규칙 적 인 텍스트 를 처리 해 야 합 니 다. 이것 은 아주 좋 은 보조 도구 입 니 다. sed 는 한 줄 한 줄 의 텍스트 처리 에 매우 편리 합 니 다.
    참고 자료
  • Classic Shell Scripting, Aronld Robbins, Nelson H.F.Beebe O'REILLY Media,Inc
  • 좋은 웹페이지 즐겨찾기