Shell 스 크 립 트 의 작성, sed 의 사용 및 정규 표현 식
태그 (공백 구분): 블 로그 글
얼마 전에 웹 감사 규칙 을 대량으로 수정 하기 위해
Shell
스 크 립 트 를 작 성 했 습 니 다. 참고 로 sed
도 다시 배 웠 습 니 다. 정리 해 야 할 것 같 습 니 다. 그렇지 않 으 면 자신 에 게 떳떳 하지 못 할 것 같 습 니 다.Shell
양쪽 에 어떠한 =
도 남기 지 않 아야 합 니 다.
시작 부분 에서 사용 가능 if [ ! -e "$website_dir" -o ! -e "$weblogin_dir" ]
then
echo "$website_dir "
echo "$weblogin_dir "
else
...
fi
$
, if
, then
은 반드시 한 줄 만 있어 야 합 니 다. 같은 줄 을 원한 다 면 else
으로 분리 하 십시오. 그렇지 않 으 면 잘못 보고 할 수 있 습 니 다. 또한 ;
뒤의 조건 상자 if
는 양 끝 에 빈 칸 을 남 겨 야 합 니 다. 매번 판단 옵션 이 있어 야 합 니 다.논리 기호 와 빈 칸 을 남 겨 야 합 니 다. 마지막 []
끝 fi
조건 중의 각종 옵션 은 다른 검색엔진 에서 찾 을 수 있다 case $1 in
replace)
...
exit 1;;
restore)
...
exit 1;;
*)
echo "replace: "
echo "restore: ";;
esac
if
은 실행 할 때의 첫 번 째 입력 매개 변 수 를 선택 하 는 것 을 말 합 니 다. 이곳 의 입력 매개 변 수 는 terminal 에서 출력 하 는 것 을 말 합 니 다. 여 기 는 고정 $1
, $0:
Sed 프로필
sed 는 한 줄 의 내용 을 처리 하 는 온라인 편집기 입 니 다.처리 할 때 현재 처 리 된 줄 을 임시 버퍼 에 저장 하여 '패턴 공간' (pattern space) 이 라 고 부 릅 니 다. 이 어 sed 명령 으로 버퍼 의 내용 을 처리 하고 처리 가 완료 되면 버퍼 의 내용 을 화면 으로 보 냅 니 다.이 어 다음 줄 을 처리 하고 파일 이 끝 날 때 까지 반복 합 니 다.파일 내용 은 변경 되 지 않 았 습 니 다. 리 셋 저장 소 출력 을 사용 하지 않 는 한.Sed 는 주로 하나 이상 의 파일 을 자동 으로 편집 하 는 데 사 용 됩 니 다.파일 에 대한 반복 작업 간소화;변환 프로그램 작성 등.sed 텍스트 줄 처리 에 적합
인 스 턴 스 결합 사용
우선 sed 의 사용 형식 네트워크 에는 저 보다 상세 한 튜 토리 얼 이 있 습 니 다. 여러분 은 마음대로 구 글 을 할 수 있 습 니 다. 여 기 는 제 가 실제 적 으로 겪 은 비교적 까다 로 운 문제 만 을
sed -i "/^[^#SUB].*WEBFORUM_/{s/\(.*\)CONTENT/\1REFERER=H24@P(7::),CONTENT/g}" $website_dir
$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
{}
, {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 는 한 줄 한 줄 의 텍스트 처리 에 매우 편리 합 니 다.참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.