셸 스 크 립 트 학습 - 정규 표현 식, sed, awk
40457 단어 셸 스 크 립 트 학습
.
* 0
.*
^
$
^$
[]
[^]
^[]
^[^]
\<
\>
\< \>
\{n\} n
\{n,\} n
\{n,m\} n~m
\( \)
\d (grep -P) [0-9]
\w (grep -P) [a-zA-Z0-9_]
\s 、 、 (grep -P) [\t\r
]
grep -E egrep
sed -r
+
? 0
|
() ( )
{n} n
{n,} n
{n,m} n~m
2. 두 번 째 정규 표현 식
[:alnum:] 、 [[:alnum:]]+
[:alpha:] ( ) [[:alpha:]]{4}
[:blank:] [[:blank:]]*
[:digit:] [[:dight:]]?
[:lower:] [[:lower:]]{4,}
[:upper:] [[:upper:]]+
[:punct:] [[:punct:]]
[:space:] 、 [[:space:]]+
명령 행 형식
sed [options] ' '
-e
-n
-r
-i ( )
-f sed
'p'
'i'
'a'
'c'
'd'
:sed ‘ + ’
sed '' a.txt
sed -n '2p' a.txt
sed -n '1,5p' a.txt
sed -n '$p' a.txt
sed '2ihello world' a.txt
sed '3ihello
world' a.txt
sed '2,4a999' a.txt
sed '$chello world' a.txt
sed '/^adm/chello world' a.txt
sed '1,5chello world' a.txt 1~5 hello world
sed '1,4d' a.txt
sed -r '/([0-9]{1,3}\.){3}[0-9]{1,3}/d' a.txt
파일 검색 교체 작업
:sed ‘s/ / / ’
s ;/ , ; p g
sed -n 's/root/ROOT/p' 1.txt
sed -n 's/root/ROOT/gp' 1.txt
sed -n 's/^#//gp' 1.txt #
sed -n 's@/sbin/nologin@hello@gp' 1.txt
sed -n '10s@/sbin/nologin@hello@gp' 1.txt 10
sed -n '1,5s/^/#/gp' 1.txt
sed -n 's#\(10.1.1.\)1#\1254#gp' 1.txt
기타 명령
r
w
& \(\)
=
! ,
q
sed '3r /etc/hosts' 1.txt
sed '1,5w 11.txt' 1.txt
sed -n 's/^sync/#&/gp' 1.txt sync
sed -ne '/root/p' -ne '/root/=' 1.txt ,
sed -n '/root/=;/root/p' 1.txt
sed -n '1,5!p' 1.txt 1~5
sed '/shutdown/q' 1.txt shutdown
기타 옵션
-e
-r
-i
grep -v '^#' vsftpd.conf |grep -v '^$'
sed -e '/^#/d' -e '/^$/d' vsftpd.conf
sed -e '/^#/d;/^$/d' vsftpd.conf
sed -r '/^#|^$/d' vsftpd.conf
sed -i 's/root/ROOT/g' 1.txt
sed 결합 정규 사용
sed ‘sed ’
/key/ sed -n '/root/p' 1.txt
/key1/,/key2/ sed -n '/^adm/,/^mysql/p' 1.txt
/key/,x sed -n '/^ftp/,7p' 1.txt x
x,/key/
x,y! x y
/key/! sed -n '/bash$/!p' 1.txt
2. 스 크 립 트 형식
sed -f scripts.sh file
./sed.sh file
#!/bin/sed -f
1,5d
s/root/ROOT/g
3i777
5i888
a999
p
: sed ;
、
#
3. awk 1. 문법 구조:
awk ' ' ( shell )
-F ,
-v
:
,
'/root/{awk }' sed '/root/p'
'NR==1,NR==5{awk }' '1,5p'
'/^root/,/^ftp/{awk }' '/^root/,/^ftp/p'
{awk 1;awk 2;...}
'{print $0;print $1}' 'p'
'NR==5{print $0}' '5p'
#awk
BEGIN...END...
'BEGIN{awk };{ };END{awk }'
'BEGIN{awk };{ }'
'{ };END{awk }'
2. 스 크 립 트 모드
#!/bin/awk -f
# awk ,
BEGIN{FS=":"}
NR==1,NR==3{print $1"\t"$NF}
...
:
awk -f awk
awk -f awk.sh filename
awk -f awk.sh -i filename
:
./awk ( )
./awk.sh filename
3. awk 내부 관련 변수
$0
$1,$2,$3...$n awk -F:'{print $1,$3}'
NF ( ) awk -F: '{print NF}'
$NF $(NF-1)
FNR/NR
FS 'BEGIN{FS=":"};{print $1,$3}'
OFS , 'BEGIN{OFS="\t"};{print $1,$3}'
RS , 'BEGIN{RS="\t"};{print $0}'
ORS , 'BEGIN{PRS="
"};{print $1,$3}'
FILENAME
4 、 awk 사용 진급
print printf
print echo
date |awk '{print "Month: "$2 "
Year: "$NF}'
printf echo -n
awk -F: '{printf "%-15s %-10s %-15s
", $1,$2,$3}' /etc/passwd
awk -F: '{printf "|%-15s| %-10s| %-15s|
", $1,$2,$3}' /etc/passwd
awk
awk -v NUM=3 -F: '{print NUM}' 1.txt
awk -v NUM=3 'BEGIN{print NUM}'
#awk $
awk BEGIN...END
BEGIN
END
'BEGIN{ };{ }:END{ }'
:
awk -F: 'BEGIN{print "Login_shell\t\tLogin_home
*************"};{print $NF"\t\t"$(NF-1)};END{print "*************"}' 1.txt
2、 /etc/passwd 、 、 shell
awk -F: 'BEGIN{OFS="\t\t";print "u_name\t\th_dir\t\tshell
****************"};{printf "%-20s %-20s %-20s
",$1,$(NF-1),$NF};END{print "******************"}' /etc/passwd
awk
==
!=
>
<
>=
<=
~
!~
!
&&
||
awk -F: 'NR==1,/^lp/{print $0}' passwd
awk -F: '/^root/ || /^lp/{print $0}' passwd
awk 'NR>=30 && NR<=39 && $0 ~ /bash$/{print $0}' passwd
ip
ifconfig eth0 |grep Bcast|awk -F: '{print $2}' |awk '{print $1}'
ifconfig eth0 |grep Bcast|awk -F'[: ]+' '{print $4}'
ifconfig eth0 |awk -F"[: ]+" '/inet addr/{print $4}'
5. awk 스 크 립 트 프로 그래 밍 프로 세 스 제어 문
if
:awk ' , {awk }'
{if( ) ( 1; 2;...)}
awk -F: '{if($3==0) {print $1" "}}' passwd
awk 'BEGIN{if($(id -u)==0) {print "admin"}}'
if...else
:{if( ) { ; ;...} else { ; ;...}}
awk -F: '{if($3>=500 && $3 !=65534) {print $1" "} else {print $1" "}}' passwd
awk 'BEGIN{if($(id -u)>=500 && $(id -u) !=65534) {print " "} else {print " "}}'
if...else if...else
:{if( 1) { ; ;...} else if( 2) { ; ;...} else if( 3) { ; ;...} else { ; ;...}}
awk -F: '{if($3==0) {print $1"is admin"} else if($3>=500 && $3<=60000) {print $1"is normal user"} else {print $1"is system user"}}' passwd
awk -F: '{if($3==0) {i++} else if($3>=1 && $3<=499 || $3==65534) {j++} else {k++}};END{print " :"i"
:"j"
:"k}' passwd
순환 문
for
awk 'BEGIN{for(i=1;i<=5;i++) {print i}}'
awk 'BEGIN{sum=0;for(i=1;i<=10;i+=2) sum=sum+i;{print sum}}'
for ((i=1;i<=10;i+=2));do echo $i;done|awk '{sum+=$0};END{print sum}'
while
awk 'BEGIN{i=1;while(i<=5) {print i;i++}}'
awk 'BEGIN{sum=0;i=1;while(i<=10) {sum=sum+i;i+=2};{print sum}}'
awk 'BEGIN{for(y=1;y<=5;y++) {for(x=1;x<=y;x++) {printf x};print}}'
1
12
123
1234
12345
99
awk 'BEGIN{for(y=1;y<=9;y++) {for(x=1;x<=y;x++) {k=y*x;printf (x"*"y"="k"\t")};print ("
")}}'
awk 산수 연산
+ - * / %( ) ^( 2^3)
awk 'BEGIN{print 1+1}'
awk 'BEGIN{print 2**3}'
awk 'BEGIN{print 2/3}'
6. awk 연습 - 통계
shell
awk -F: '{shells[$NF]++};END{for (i in shells) {print i,shells[i]}}' /etc/passwd
ss -antp|grep 80|awk '{states[$1]++};END{for (i in states) {print i,states[i]}}'
ss -an|grep :80|awk '{states[$2]++};END{for (i in states) {print i,states[i]}}'|sort -k2 -rn
IP
netstat -ant|grep :80|awk -F: '{ip_count[$8]++};END{for (i in ip_count) {print i,ip_count[i]}}'|sort
ss -an|grep :80|awk -F: '!/LISTEN/{ip_count[$(NF-1)]++};END{for (i in ip_count) {print i,ip_count[i]}}'|sort -k2 -rn|head
PV
Apache/Nginx PV
grep '24/May/2020' mysqladmin.cc-access_log |wc -l
Apache/Nginx IP
grep '24/May/2020' mysqladmin.cc-access_log|awk '{ips[$1]++};END{for (i in ips) {print i,ips[i]}}'|sort -k2 -rn|head
grep '24/May/2020' access_log|awk '{ips[$1]++};END{for (i in ips) {print i,ips[i]}}'|awk '$2>100'|sort -k2 -rn
***** *****
(PV) , 1 PV;
(VV) 1 , 30 , , ;
(UV)1 1 UV;
IP(IP)1 IP , IP , IP 1。
7. 실전 연습 (로그 덤 프) 요구: 각 웹 서버 의 apache 방문 로 그 를 최근 3 일 동안 유지 하고 3 일 전의 로 그 를 전문 로그 서버 에 저장 해 야 합 니 다. 어떻게 서버 마다 3 일 이내 의 로 그 를 유지 합 니까?1. 모든 웹 서버 로 그 는 로그 서버 에 해당 하 는 디 렉 터 리 입 니 다.2. 각 웹 서버 는 3 일간 의 방문 로 그 를 보관 합 니 다. 3 일 전의 로 그 는 매일 새벽 5: 00 에 로그 서버 로 저장 합 니 다. 3. 스 크 립 트 저장 에 실 패 했 습 니 다. 운영 자 는 발판 메뉴 를 통 해 수 동 으로 로 그 를 정리 해 야 합 니 다.
1)apache :
vim /usr/local/apache2/conf/extar/http-vhosts.conf
...
ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_log-%Y%m%d 86400"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_log-%Y%m%d 86400" common
...
:
1.rotatelogs apache ,-l , GMT
2./usr/local/apache2/logs/access_log-%Y%m%d 86400 , 86400 s,24
2)log-server rsync,ip 10.1.1.2
cat /etc/rsyncd.conf
[web1]
path = /web1/logs
uid = root
gid = root
read only = false
[web2]
path = /web2/logs
uid = root
gid = root
read only = false
echo rsync --daemon >> /etc/rc.local
3)web
#!/bin/bash
#clean log
clean_log(){
remote_log_server=10.1.1.2
server=$1
log_dir=/usr/local/apache2/logs
log_tmp_dir=/tmp/log
host=`ifconfig eth0|sed -n '2p'|awk -F'[ :]+' '{print $4}'`
[!-d $log_tmp_dir] && mkdir -p $log_tmp_dir
cd $log_dir
find ./ -daystart -mtime +3 -exec tar -uf $log_tmp_dir/`echo $host`_$(date +%F).tar{}\;
find ./ -daystart -mtime +3 -delete
cd $log_tmp_dir
rsync -a ./ $remote_log_server::$server && find ./ -daystart -mtime +1 -delete
}
4)jumper-server
#!/bin/bash
#jumper-server
#
trap '' 1 2 3
menu1(){
cat <<-END
web1 :
1.clean_apache_log
2.reload_apache_service
3.test_apache_service
4.remote login
END
}
menu2(){
cat <<-END
:
1.DB1-Master
2.DB2-Slave
3.Web1
4.Web2
5.exit
END
}
push_pubkey(){
ip=$1
# ,
[!-f ~/.ssh/id_rsa.pub] && ssh-keygen -P "" -f ~/.ssh/id_rsa &>/dev/null
# expect ,
sudo rpm -q expect &>/dev/null
test $? -ne 0 && sudo yum -y install expect
# yunwei
/usr/bin/expect <<-EOF
spawn ssh-copy-id -i root@$ip
expect{
"yes/no" {send "yes\r";exp_continue}
"password:" {send "123456\r"}
}
expect eof
EOF
}
while true
do
menu2
#
read -p " :" host
case $host in
1)
ssh [email protected]
;;
2)
ssh [email protected]
;;
3)
clear
menu1
read -p " :" action
case $action in
1)
ssh [email protected] clean_log web1
test $? -eq 0 && ech " ..."
;;
2)
service apache reload
;;
3)
wget http://10.1.1.1 &>/dev/null
test $? -eq 0 && echo "web ..."|| echo "web , ..."
;;
4)
ssh [email protected]
;;
"")
:
;;
esac
;;
5)
exit
;;
*)
clear
echo " , ..."
;;
esac
done
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell 스 크 립 트 테스트 소 칼 (1) - 데 비 안 시스템 초기 설치 후 다양한 설정최근 에 시스템 을 자주 리 셋 하 는데 데 비 안 시스템 을 설치 한 컴퓨터 는 여러 가지 설정 이 필요 해서 정말 짜증 이 납 니 다. 그래서 스 크 립 트 를 써 서 몰래 게 으 름 을 피 우 고 매번 시스템 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.