日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell第二篇:正则表达式和文本处理工具

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell第二篇:正则表达式和文本处理工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 什么是正則

  正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。

生活中處處都是正則:

? ? 比如我們描述:4條腿

? ??  你可能會想到的是四條腿的動物或者桌子,椅子等

? ? 繼續描述:4條腿,活的

? ? ? ? ? 就只剩下四條腿的動物這一類了

?

在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,下面我們就為大家介紹三種文本處理工具/命令:grep、sed、awk,它們三者均可以解釋正則。

二 grep

參數

-n ?:顯示行號
-o ?:只顯示匹配的內容
-q ?:靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容

-l ?:如果匹配成功,則只將文件名打印出來,失敗則不打印,通常-rl一起用,grep -rl 'root' /etc?
-A ?:如果匹配成功,則將匹配行及其后n行一起打印出來
-B??:如果匹配成功,則將匹配行及其前n行一起打印出來
-C??:如果匹配成功,則將匹配行及其前后n行一起打印出來
--color
-c??:如果匹配成功,則將匹配到的行數打印出來
-E ?:等于egrep,擴展
-i ?:忽略大小寫

-v ?:取反,不匹配
-w:匹配單詞

[root@MiWiFi-R3-srv ~]# cat a.txt root123 ROot asdf Root_123 rOOtss root 123 [root@MiWiFi-R3-srv ~]# grep -i "root" a.txt root123 ROot asdf Root_123 rOOtss root 123 [root@MiWiFi-R3-srv ~]# grep -w "root" a.txt root 123

?

grep種類
grep
fgrep
pgrep
egrep

正則介紹

^ 行首
$ 行尾
. 除了換行符以外的任意單個字符
* 前導字符的零個或多個
.* 所有字符
[] 字符組內的任一字符
[^] 對字符組內的每個字符取反(不匹配字符組內的每個字符)
^[^] 非字符組內的字符開頭的行
[a-z] 小寫字母
[A-Z] 大寫字母
[a-Z] 小寫和大寫字母
[0-9] 數字
\< 單詞頭 單詞一般以空格或特殊字符做分隔,連續的字符串被當做單詞
\> 單詞尾

擴展正則 sed 加 -r 參數 或轉義
grep 加 -E 或 egrep 或轉義
AWK 直接支持 但不包含{n,m}
可以使用--posix支持
[root@MiWiFi-R3-srv ~]#??awk '/ro{1,3}/{print}' /etc/passwd
[root@MiWiFi-R3-srv ~]#??awk --posix '/ro{1,3}/{print}' /etc/passwd

sed -n '/roo\?/p' /etc/passwd
sed -rn '/roo?/p' /etc/passwd
? 前導字符零個或一個
+ 前導字符一個或多個
abc|def abc或def
a(bc|de)f abcf 或 adef
x\{m\} x出現m次
x\{m,\} x出現m次至多次(至少m次)
x\{m,n\} x出現m次至n次

posix定義的字符分類

[:alnum:] Alphanumeric characters.
匹配范圍為 [a-zA-Z0-9]
[:alpha:] Alphabetic characters.
匹配范圍為 [a-zA-Z]
[:blank:] Space or tab characters.
匹配范圍為 空格和TAB鍵
[:cntrl:] Control characters.
匹配控制鍵 例如 ^M 要按 ctrl+v 再按回車 才能輸出
[:digit:] Numeric characters.
匹配所有數字 [0-9]
[:graph:] Characters that are both printable and visible. (A space is print-
able, but not visible, while an a is both.)
匹配所有可見字符 但不包含空格和TAB 就是你在文本文檔中按鍵盤上能用眼睛觀察到的所有符號
[:lower:] Lower-case alphabetic characters.
小寫 [a-z]
[:print:] Printable characters (characters that are not control characters.)
匹配所有可見字符 包括空格和TAB
能打印到紙上的所有符號
[:punct:] Punctuation characters (characters that are not letter, digits, con-
trol characters, or space characters).
特殊輸入符號 +-=)(*&^%$#@!~`|\"'{}[]:;?/>.<,
注意它不包含空格和TAB
這個集合不等于^[a-zA-Z0-9]
[:space:] Space characters (such as space, tab, and formfeed, to name a few).

[:upper:] Upper-case alphabetic characters.
大寫 [A-Z]
[:xdigit:] Characters that are hexadecimal digits.
16進制數 [0-f]

使用方法:
[root@seker ~]# grep --color '[[:alnum:]]' /etc/passwd

正則表達式及字符處理 目標文件/etc/passwd,使用grep命令或egrep 1.顯示出所有含有root的行: 2.輸出任何包含bash的所有行,還要輸出緊接著這行的上下各兩行的內容: 3. 顯示出有多少行含有nologin。 4.顯示出那些行含有root,并將行號一塊輸出。 5.顯示出文件中 6.新建用戶abominableabominateanomieatomize編寫正則表達式,將他們匹配出來egrep 'a.omi(nabl|nat|z|)e' /etc/passwd 7.建四個用戶Alex213sbWpq2222byH438PIGegon666egon過濾出用戶名組成是字母+數字+字母的行 [root@MiWiFi-R3-srv ~]# egrep '^[a-Z]+[0-9]+[a-Z]+' /etc/passwd 8.顯示出/etc目錄下所有包含root的文件名 9. 過濾掉/etc/ssh/sshd_config內所有注釋和所有空行 grep -v '^#' /etc/ssh/sshd_config |grep -v '^ *$' grep作業

三 sed

sed
流編輯器 stream editer,是以行為單位的處理程序

sed 流編輯器 stream editer

語法
sed [options] 'command' in_file[s]
options 部分
-n
-e
-i
-f
command 部分
'[地址1,地址2] [函數] [參數(標記)]'

定址的方法 1.數字 2.正則
數字
十進制數
1 單行
1,3 范圍 從第一行到第三行
2,+4 匹配行后若干行
4,~3 從第四行到下一個3的倍數行
2~3 第二行起每間隔三行的行
$ 尾行
1! 除了第一行以外的行
正則
正則必須用//包裹起來
擴展正則需要用 -r 參數或轉義

數字定址:sed -n '1p' /etc/passwd

正則定址:sed -n '/^root/p' /etc/passwd

正則介紹

^ 行首
$ 行尾
. 除了換行符以外的任意單個字符
* 前導字符的零個或多個
.* 所有字符
[] 字符組內的任一字符
[^] 對字符組內的每個字符取反(不匹配字符組內的每個字符)
^[^] 非字符組內的字符開頭的行
[a-z] 小寫字母
[A-Z] 大寫字母
[a-Z] 小寫和大寫字母
[0-9] 數字
\< 單詞頭 單詞一般以空格或特殊字符做分隔,連續的字符串被當做單詞
\> 單詞尾

擴展正則 加 -r 參數 或轉義
sed -n '/roo\?/p' /etc/passwd
sed -rn '/roo?/p' /etc/passwd
? 前導字符零個或一個
+ 前導字符一個或多個
abc|def abc或def
a(bc|de)f abcf 或 adef
x\{m\} x出現m次
x\{m,\} x出現m次至多次(至少m次)
x\{m,n\} x出現m次至n次


函數
增刪改
a 后插
c 替換
i 前插
d 刪除
輸入輸出
p 打印匹配的行 一般和 -n 參數連用,以屏蔽默認輸出
r 從文件中讀入
w 寫入到文件中
控制流
! 命令取反 例: 1!d 刪除第一行以外的行
{} 命令組合 命令用分號分隔 {1h;G} 可以理解為 -e 參數的另一種寫法

= 打印行號(輸入行的號碼,而非處理的次數行號) 例如: sed -n '2{=;p}' infile
n 讀入下一行到模式空間 例:'4{n;d}' 刪除第5行
N 而是追加下一行到模式空間,再把當前行和下一行同時應用后面的命令

?

替換
s 字符串替換 s/old/new/

$ sed -n 's/root/ABCDEF/p' /etc/passwd

ABCDEF:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

$ sed -n 's/root/ABCDEF/gp' /etc/passwd

ABCDEF:x:0:0:ABCDEF:/ABCDEF:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

$ sed -n 's/root/ABCDEF/2p' /etc/passwd

root:x:0:0:ABCDEF:/root:/bin/bash

$ sed -n 's/root/ABCDEF/3p' /etc/passwd

root:x:0:0:root:/ABCDEF:/bin/bash

$ sed -n 's/root/ABCDEF/gp' /etc/passwd

ABCDEF:x:0:0:ABCDEF:/ABCDEF:/bin/bash

operator:x:11:0:operator:/ABCDEF:/sbin/nologin

$

\(\) 保存被匹配的字符 以備反向引用\N時使用 最多9個標簽 標簽順序從左至右
& 替換時使用,在不定義標簽時使用(反向引用)


試做:

刪除第一個單詞

刪除最后一個單詞

將第一個單詞和最后一個單詞兌換位置


y 字符替換(變形)

工作模式 模式空間和保持空間介紹


$ sed '1{p;p}' a.txt

11111111

11111111

11111111

22222222

33333333

44444444

55555555

66666666

$


置換 模式空間和保持空間(暫存空間)
h 把模式空間內容覆蓋到保持空間中
H 把模式空間內容追加到保持空間中
g 把保持空間內容覆蓋到模式空間中
G 把保持空間內容追加到模式空間中
x 交換模式空間與保持空間的內容

# cat test.sh
1111111
2222222
3333333
4444444
# sed '{1h;2,3H;4G}' ./test.sh
1111111
2222222
3333333
4444444
1111111
2222222
3333333
# sed '{1h;2x;3g;$G}' ./test.sh
1111111
1111111
2222222
4444444
2222222
#


試做題

將第一行插入到每個偶數行的后面

$ sed '1h;0~2G' a.txt

11111111

22222222

11111111

33333333

44444444

11111111

55555555

66666666

11111111

$

顛倒輸出

$ sed '1!G;h;$!d' rev.txt

xyz

def

abc

$

腳本方法
-f 參數 引用腳本(腳本的末尾不能有空格制表符或其他文本)
# cat sed.sh
2,4d
s/777/seker/
s/999/seker&seker/
# sed -f sed.sh test.txt
1111111
5555555
6666666
seker7777
8888888
seker999seker9999
#

在腳本中指明解釋器為sed
# cat sed.sh
#!/bin/sed -f
2,4d
s/777/seker/
s/999/seker&seker/
# ./sed.sh test.txt
1111111
5555555
6666666
seker7777
8888888
seker999seker9999
#

高級流控命令 b分支 t測試
分支命令用于無條件轉移,測試命令用于有條件轉移

分支 branch
跳轉的位置與標簽相關聯
如果有標簽則跳轉到標簽所在的后面行繼續執行
如果沒有標簽則跳轉到腳本的結尾處.
標簽 以冒號開始后接標簽名 不要在標簽名前后使用空格
跳轉到標簽指定位置
[root@stu254 ~]# grep seker /etc/passwd
seker:x:500:500::/home/seker:/bin/bash
[root@stu254 ~]#
[root@stu254 ~]# grep seker /etc/passwd |sed ':top;s/seker/blues/;/seker/b top;s/5/555/'
blues:x:55500:500::/home/blues:/bin/bash
[root@stu254 ~]#

命令分析:讓單次替換(cmd1)循環執行,直到條件不滿足
:top; 定義一個top標簽
s/seker/blues/; cmd1
/seker/b top; 如果模式匹配則跳轉到top標簽
s/5/555/ 當上一條模式不匹配時,既會繼續執行這一條

選擇執行
[root@stu254 ~]# grep 'seker' /etc/passwd |sed 's/seker/blues/;/seker/b end;s/5/555/;:end;s/5/666/'
blues:x:66600:500::/home/seker:/bin/bash
[root@stu254 ~]#

zorro:x:501:501::/home/zorro:/bin/bash
[root@stu254 ~]# grep 'zorro' /etc/passwd |sed 's/seker/blues/;/seker/b end;s/5/555/;:end;s/5/666/'
zorro:x:6665501:501::/home/zorro:/bin/bash
[root@stu254 ~]#

命令分析: 執行cmd1,再去模式匹配,成功則跳轉到cmd3開始執行,否則(模式不匹配)會按命令順序逐個執行
s/seker/blues/; cmd1
/seker/b end;
s/5/555/; cmd2
:end;
s/5/666/ cmd3

另一種選擇執行
[root@stu254 ~]# grep 'seker' /etc/passwd |sed 's/seker/blues/;/seker/b end;s/5/555/;b;:end;s/5/666/'
blues:x:66600:500::/home/seker:/bin/bash

[root@stu254 ~]# grep 'zorro' /etc/passwd |sed 's/seker/blues/;/seker/b end;s/5/555/;b;:end;s/5/666/'
zorro:x:55501:501::/home/zorro:/bin/bash
[root@stu254 ~]#

命令分析: 執行cmd1;模式匹配cmd2成功則執行cmd3;否則執行cmd2,再跳轉到腳本末尾
s/seker/blues/; cmd1
/seker/b end;
s/5/555/; cmd2
b;
:end;
s/5/666/ cmd3


測試命令,如果前一個替換命令執行成功則跳轉到腳本末尾 (case結構)
[root@stu254 ~]# grep 'seker' /etc/passwd |sed 's/seker/ABC/;t;s/home/DEF/;t;s/bash/XYZ/'
ABC:x:500:500::/home/seker:/bin/bash

[root@stu254 ~]# grep 'zorro' /etc/passwd |sed 's/seker/ABC/;t;s/home/DEF/;t;s/bash/XYZ/'
zorro:x:501:501::/DEF/zorro:/bin/bash
[root@stu254 ~]#

與標簽關聯,跳轉到標簽位置
[root@stu254 ~]# grep 'seker' /etc/passwd |sed 's/seker/ABC/;t end;s/home/DEF/;t;:end;s/bash/XYZ/'
ABC:x:500:500::/home/seker:/bin/XYZ
[root@stu254 ~]#

[seker@seker ~]$ grep 'zorro' /etc/passwd |sed 's/seker/ABC/;t end;s/home/DEF/;t;:end;s/bash/XYZ/'
zorro:x:501:501::/DEF/zorro:/bin/bash

Sed作業:以/etc/passwd文件為模板1,刪除文件每行的第一個字符。2,刪除文件每行的第二個字符。3,刪除文件每行的最后一個字符。4,刪除文件每行的倒數第二個字符。5,刪除文件每行的第二個單詞。6,刪除文件每行的倒數第二個單詞。7,刪除文件每行的最后一個單詞。8,交換每行的第一個字符和第二個字符。9,交換每行的第一個字符和第二個單詞。10,交換每行的第一個單詞和最后一個單詞。11,刪除一個文件中所有的數字。12,刪除每行開頭的所有空格。13,用制表符替換文件中出現的所有空格。14,把所有大寫字母用括號()括起來。15,打印每行3次。16,隔行刪除。17,把文件從第2行到第5行復制到第7行后面。(選做題)18,把文件從第2行到第5行移動到第7行后面。(選做題)19,只顯示每行的第一個單詞。20,打印每行的第一個單詞和第三個單詞。21,將格式為 mm/yy/dd 的日期格式換成 mm;yy;dd22, a.txt內容ABCDEFXYZ通過SED實現tac命令tac a.txtXYZDEFABC1. sed -r 's/^(.)(.*)/\2/' /etc/passwd 2. sed -r 's/^(.)(.)(.*)/\1\3/' /etc/passwd 3. sed -r 's/(.*)(.)$/\1/' /etc/passwd 4. sed -r 's/(.*)(.)(.)$/\1\3/' /etc/passwd 5. sed -r 's/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\1\2\4/' /etc/passwd 6. sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/\1\3\4/' /etc/passwd 7. sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/\1\2\3/' /etc/passwd 8. sed -r 's/^(.)(.*)(.)$/\3\2\1/' /etc/passwd 9. sed -r 's/^(.)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\4\2\3\1\5/' /etc/passwd 10. sed -r 's/^([a-Z]+)([^a-Z]+)(.*)([^a-Z]+)([a-Z]+)$/\5\2\3\4\1/' /etc/passwd 11. sed -r 's/[0-9]//g' /etc/passwd 12. sed -r 's/^ *//g' /etc/passwd 13. sed -r 's/ /\t/g' /etc/passwd 14. sed -r 's/[A-Z]/(&)/g' /etc/passwd 15. sed 'p;p' /etc/passwd 16. sed '1~2d' /etc/passwd選做題17-18:文件內容 [root@MiWiFi-R3-srv ~]# cat test 11111111111 2222222222 333333333 4444444444 55555555555 6666666666 777777777777 888888888888 9999999999999917.sed '2h;3,5H;7G' test 18. sed '2h;3,5H;2,5d;7G' test 19. sed -r 's/^([a-Z]+)([^a-Z]+)(.*)/\1/' /etc/passwd 20. sed -r 's/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\5\2\3\4\1\6/' /etc/passwd 21. 22. sed -r '{1h;1d;2G;2h;2d;3G;3h}' 23. echo "2012/12/11" |sed -r 's/\//:/g' echo "2012/12/11" |sed -r 's#\/#:#g' echo "2012/12/11" |sed -r 's@\/@:@g' sed作業

四 awk

awk -F: '$1 == "root"{print $1,NR,NF}' /etc/passwd
awk -F: 'NR>20 || NR<3{print $1,$3,$NF}' /etc/passwd
awk -F: 'NR>1 && NR<3{print $1,NR,NF}' /etc/passwd
awk -F: 'NR>1 && NR<4{print $1,NR,NF}' /etc/passwd
awk -F: '$1~/^r/{print $1,NR,NF}' /etc/passwd
awk -F: '/^root/{print $1,NR,NF}' /etc/passwd

?

username=root
awk -v var=$username -F: '$1 == var{print $1,NR,NF}' /etc/passwd

打印uid在30~40范圍內的用戶名。 打印第5-10行的行號和用戶名 打印奇數行 打印偶數行 打印字段數大于5的行 打印UID不等于GID的用戶名 打印沒有指定shell的用戶 awk作業

?

awk詳細

語法
awk [options] 'commands' files
option
-F 定義字段分隔符,默認的分隔符是連續的空格或制表符
使用option中的-F參數定義間隔符號
用$1,$2,$3等的順序表示files中每行以間隔符號分隔的各列不同域
NF變量表示當前記錄的字段數
-v 定義變量并賦值 也可以借用次方式從shell變量中引入

?

command
讀前處理 行處理 讀后處理
1.讀前處理 BEGIN{awk_cmd1;awk_cmd2}
2.行處理:定址 命令
定址方法: 正則,變量,比較和關系運算
正則需要用//包圍起來
^ 行首
$ 行尾
. 除了換行符以外的任意單個字符
* 前導字符的零個或多個
.* 所有字符
[] 字符組內的任一字符
[^] 對字符組內的每個字符取反(不匹配字符組內的每個字符)
^[^] 非字符組內的字符開頭的行
[a-z] 小寫字母
[A-Z] 大寫字母
[a-Z] 小寫和大寫字母
[0-9] 數字
\< 單詞頭 單詞一般以空格或特殊字符做分隔,連續的字符串被當做單詞
\> 單詞尾

?

擴展正則 加 -r 參數 或轉義
sed -n '/roo\?/p' /etc/passwd
sed -rn '/roo?/p' /etc/passwd
? 前導字符零個或一個
+ 前導字符一個或多個
abc|def abc或def
a(bc|de)f abcf 或 adef
x\{m\} x出現m次
x\{m,\} x出現m次至多次(至少m次)
x\{m,n\} x出現m次至n次

?

NR變量定址
NR 表示AWK讀入的行數
FNR表示讀入行所在文件中的行數
# awk '{print NR,FNR,$1}' file1 file2
1 1 aaaaa
2 2 bbbbb
3 3 ccccc
4 1 dddddd
5 2 eeeeee
6 3 ffffff
#
邏輯運算 可直接引用域進行運算
== >= <= != > < ~ !~
# awk 'NR==1 {print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
#
3.命令 {print $0}
4.讀后處理 END {awk_cmd1;awk_cmd2;}

?


AWK變量
NR 當前記錄的個數(全部文件連接后的統計)
FNR 當前記錄的個數(僅為當前文件的統計,非全部)
FS 字段分隔符 默認為連續空格或制表符,可以使用多個不同的符號做分隔符 -F[:/]
OFS 輸出字符的分隔符 默認是空格
# awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd
root=====x
NF 當前讀入行的字段個數
ORS 輸出記錄分隔符 默認是換行
# awk -F: 'ORS="=====" {print $1,$2}' /etc/passwd
root x=====bin x=====
FILENAME 當前文件名

?

引用shell變量的方法
# a=root
# awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd
或者 把整個命令拆開傳遞,讓shell變量外露,
# awk -F: '$1 == "'$a'" {print $0}' /etc/passwd
# a=NF
# awk -F: '{print $'$a'}' /etc/passwd

?

操作符
賦值
= += -= /= *=
邏輯與 邏輯或 邏輯非
&& || !
匹配正則或不匹配,正則需要用 /正則/ 包圍住
~ !~
關系 比較字符串時要把字符串用雙引號引起來
< <= > >= != ==
字段引用
$ 字段引用需要加$,而變量引用直接用變量名取
運算符
+ - * / % ++ --
轉義序列
\\ \自身
\$ 轉義$
\t 制表符
\b 退格符
\r 回車符
\n 換行符
\c 取消換行

?


練習
打印uid在30~40范圍內的用戶名。
打印第5-10行的行號和用戶名
打印奇數行
打印偶數行
打印字段數大于5的行
打印UID不等于GID的用戶名
打印沒有指定shell的用戶
打印1..1000以內的7的倍數和包含7的數

?

流程控制
分支結構

?

if (條件) 動作
若有多個動作,則要用大括號將動作體包含起來 if (條件) {動作1;動作2}
# awk -F: '{if ($1 == "root") print $1}' /etc/passwd
root
#
# awk -F: '{if ($1 == "root") {print $1;print $6}}' /etc/passwd
root
/root
#

if (條件1)
動作1
else
動作2
# awk -F: '{if ($1 == "root"){print $1}else print $6}' /etc/passwd
# awk -F: '{if ($1 == "root") print $1;else print $6}' /etc/passwd
上面兩個命令是等價的,要么用分號隔開,表示第一個動作體的結束,要么將動作體用大括號定位范圍

if (條件 1)
動作1
else if(條件 2)
動作2
else if(條件 3)
動作3
else
動作4
# awk -F: '{if ($1 == "root") print $1;else if ($1 == "seker") print $6;else if ($1 == "zorro") print $7;else print NR}' /etc/passwd
root
2
3
...
33
/home/seker
/bin/bash
36

?

條件 ? 動作1 : 動作2
expr?action1:action2
# awk -F: 'var=($3 >= 500)?$1:"system_user" {print $1"\t"$3"\t"var}' /etc/passwd
# awk -F: '{print ($3>500?$1:$2)}' /etc/passwd

?

練習
將系統用戶按UID分組標記 0 admin; 1-499 sysuser; 500+ users
awk -F: '{if($3==0) print $1"\t"$3"\t""admin";else if($3>=1&&$3<500) print $1,$3,"sysuser";else print $1,$3,"user"}' /etc/passwd

?

輸出樣式
%s是字符類型,%d數值類型
printf默認是不輸出換行的所以要加\n
10和7是偏移量
默認是右對齊,所有加個- 就是左對齊,就是把不足的位數用空格填充
注意:格式與輸出列之間要有逗號
# awk -F: '{printf "%-10s %-10d %s\n",$1,$3,$7}' /etc/passwd

?


讀前處理和讀后處理
# awk -F: 'BEGIN{i=1} {i++} END {print i}' /etc/passwd
47
#
# awk -F: 'BEGIN {print NR,NF}' /etc/passwd
0 0
#
# awk -F: 'END {print NR,NF}' /etc/passwd
46 7
#
練習
找出普通用戶的用戶名并統計數量
# awk -F: 'BEGIN{i=0} $3 >= 500 {print $1;i++} END {print i}' /etc/passwd
計算UID相加的總和;計算GID相加的總和
# awk -F: 'BEGIN{i=0}{sum+=$3;i++}END{print i;print sum}' /etc/passwd
# awk -F: 'BEGIN{i=0}{sum+=$3;gsum+=$4;i++}END{print i;print sum;print gsum}' /etc/passwd
計算VSZ和RSS各自的和 并以M單位顯示
# ps aux | awk 'BEGIN{i=0}NR>=2{sum+=$5;i++}END{print sum/1024"M"}'
# ps aux | awk 'BEGIN{i=0}NR>=2{vsum+=$5;rsum+=$6;i++}END{print vsum/1024"M";print rsum/1024"M";print i}'
循環語句
while(條件) {
動作
條件運算
}
# awk -F: '{while($3<3) {print $3,$1;$3++}}' /etc/passwd
0 root
1 root
2 root
1 bin
2 bin
2 daemon
#
BEGIN塊可以獨立使用,不需要引入文件
# awk 'BEGIN{i=1;while(i<100) {print i;i++}}'
練習
打印100以內的偶數
# awk 'BEGIN{i=1;while(i<100) {if (i%2==0) print i;i++}}'

x=1
do {
動作1
x++
} while (x<5)
# awk 'BEGIN{i=5;do{print i;i++}while(i<10)}'
# awk 'BEGIN{i=5;do{print i;i++}while(i<1)}'

?

for(預置;條件;遞增) {
動作
}
# awk 'BEGIN {for (x=1;x<=4;x++) print x }'
1
2
3
4
#
# awk 'BEGIN{for (i=1;i<=4;i++) {for (j=1;j<=4;j++) print i,j}}'

?


練習
使用嵌套的for循環,打印100-999之間的數,個十百位分別用一個for來打印
# awk 'BEGIN{OFS="";for (i=1;i<=9;i++) {for (j=0;j<=9;j++) {for (n=0;n<=9;n++) print i,j,n}}}'
打印乘法口訣表
# cat 99.sh
#!/bin/bash
awk 'BEGIN{
for(i=1;i<10;i++)
{
for(j=1;j<=i;j++)
printf "%d*%d=%d ",j,i,j*i
print
}

?

}'
#

?

打印金字塔
# cat jin.sh
#!/bin/bash
awk 'BEGIN{
num=5
for(i=1;i<=num;i++)
{
for (n=1;n<=num-i;n++)
printf "%s"," "
for (j=1;j<=2*i-1;j++)
printf "%s","*"
print
}
}'
#

?

逆序輸出每個字段
達到這樣既可
/bin/bash
/root
root
0
0
x
root

?


# awk -F: '{for (x=NF;x>0;x--) print $x}' /etc/passwd

?

繼續解決上一個試做題的格式問題
# awk -F: '/bash$/{for (x=NF;x>0;x--) printf "%-13s",$x;printf "\n"}' /etc/passwd

?

跳轉語句
break 跳出循環
# awk 'BEGIN {for(x=1;x<5;x++) {if (x==3) break;print x }}'
1
2

continue 在達到循環底部之前終止當前循環 從新開始下一次循環
# awk 'BEGIN {for(x=1;x<5;x++) {if (x==3) continue;print x }}'
1
2
4

?

next 讀入下一行 同時返回腳本頂部 這樣可以避免對當前行執行其他操作
# awk -F: 'NR > 5 {next} {print $1} END {print NR}' /etc/passwd
root
bin
daemon
adm
lp
46
#
exit 使讀取動作終止 并將控制移動到END,如果沒有END則終止腳本
# awk -F: 'NR > 5 {exit} {print $1} END {print NR}' /etc/passwd
root
bin
daemon
adm
lp
6
#

?

數組
自定義數組
# awk 'BEGIN {ary[1]="seker";ary[2]="zorro";print ary[1],ary[2]}'
seker zorro
#
# awk 'BEGIN {ary[1]="seker";ary[2]="zorro";for(i in ary) print ary[i]}'
seker
zorro
#
刪除一個元素 對元素給空值并不能清除這個元素 要想清除一個元素需要使用delete ary[idx]
# awk 'BEGIN {ary[1]="seker";ary[2]="zorro";ary[3]="blues";ary[2]="";for(i in ary) print ary[i]}'
seker

?

blues
# awk 'BEGIN {ary[1]="seker";ary[2]="zorro";ary[3]="blues";delete ary[2];for(i in ary) print ary[i]}'
seker
blues
#

?

循環產生數組和取出數組
# awk 'BEGIN{n=5;for (i=1;i<=n;i++) ary[i]=i+100;for(m in ary) print m,ary[m]}'
4 104
5 105
1 101
2 102
3 103
#

# awk -F: '{ary[NR]=$1} END {for(i in ary) print i,ary[i]}' /etc/passwd
1 root
2 bin
3 daemon
4 adm
5 lp
6 sync
7 shutdown
8 halt
9 mail
# awk -F: '{ary[$3]=$1} END {for(i in ary) print i,ary[i]}' /etc/passwd
10 uucp
11 operator
12 games
13 gopher
14 ftp
32 rpc
37 rpm

?

ARGV 命令行中參數數組
# awk '{for (i in ARGV) {print i,ARGV[i]}}' /etc/passwd /etc/fstab
0 awk
1 /etc/passwd
2 /etc/fstab
#### i 為下標; ARGV[i] 下標為i的值
練習
統計每種shell被使用的次數

?


函數

?

算術函數 int
[root@stu254 ~]# awk 'BEGIN {print int(3.9415)}'
3
[root@stu254 ~]#

?


隨機數函數 rand() srand()
rand() 取值 0 > r < 1 之間 默認的種子是系統時間 精確到秒
srand()取值 0 > r < 1 之間 可以指定種子來影響rand()取值數 默認是系統時間 精確到秒

?

[root@stu254 ~]# awk 'BEGIN {srand(222);print int(rand()*100000000)}'
90204196
[root@stu254 ~]#

?

字符串函數
substr(s,x[,y])
返回字符串s中從位置x起至y的子串,如果沒有給出y,則從x開始到結束.
[root@stu254 ~]# awk 'BEGIN {x="abcdefxyz";print substr(x,4,3)}'
def
[root@stu254 ~]#

?

大寫小寫
sprintf() 本身并不能打印,做格式轉換,將數字轉換成ASCII字符
# awk 'BEGIN {for(i=97;i<=122;++i) print tolower(toupper(sprintf("%c",i)))}'

?

字符串長度
length() 如果沒有給定字符串則使用$0
[root@stu254 ~]# awk 'BEGIN {print length("abcdefxyz")}'
9

?

gsub(/abc/,"ABC",x) 全局字符串替換
從x中用匹配的abc正則替換成ABC
[root@stu254 ~]# awk 'BEGIN {x="xyzabcxyzabcxyz";gsub(/abc/,"ABC",x);print x}'
xyzABCxyzABCxyz
[root@stu254 ~]# sub 第一次的替換
[root@stu254 ~]# awk 'BEGIN {x="xyzabcxyzabcxyz";sub(/abc/,"ABC",x);print x}'
xyzABCxyzabcxyz
[root@stu254 ~]#

?

gensub(r, s, h [, t]) Search the target string t for matches of the reg-
ular expression r. If h is a string beginning
with g or G, then replace all matches of r with s.
Otherwise, h is a number indicating which match of
r to replace. If t is not supplied, $0 is used
instead.
gensub(正則,替換,范圍,目標串)
[root@tch254 ~]# awk 'BEGIN{print gensub("zorro","AAAA","2","seker zorro zorro seker")}'
seker zorro AAAA seker
[root@tch254 ~]# echo seker zorro zorro seker | sed 's/zorro/AAAA/2'
seker zorro AAAA seker
[root@tch254 ~]#
[root@tch254 ~]# echo seker zorro zorro seker | awk '{$0=gensub("zorro","AAAA","g");print}'
seker AAAA AAAA seker
[root@tch254 ~]# echo seker zorro zorro seker | awk '{$0=gensub("zorro","AAAA","2");print}'
seker zorro AAAA seker
[root@tch254 ~]# echo seker zorro zorro seker | awk '{$0=gensub("zorro","AAAA","h");print}'
seker AAAA zorro seker
[root@tch254 ~]# echo seker zorro zorro seker | awk '{$0=gensub("zorro","AAAA","1");print}'
seker AAAA zorro seker
[root@tch254 ~]#

?


系統函數
getline

?

交互輸入
[root@stu254 ~]# awk -F: 'BEGIN {printf "Enter Number: ";getline ;for(i=1;i<=$0;i++) print i}'
Enter Number: 3
1
2
3
[root@stu254 ~]#

?

將輸入賦值給變量
[root@stu254 ~]# awk -F: 'BEGIN {printf "Enter Number: ";getline NUM;for(i=1;i<=NUM;i++) print i}'
Enter Number: 3
1
2
3
[root@stu254 ~]#

?

從文件中讀入
[root@tch254 ~]# awk -F: 'BEGIN {getline < "/etc/passwd" ; print $3"\t"$1}'
0 root
[root@tch254 ~]#

?

#awk -F: 'BEGIN {while (getline < "/etc/passwd" > 0) print $3"\t"$1}'

?

getline < "/etc/passwd" 從文件中讀入,每次讀取一行,默認情況下讀取的次數等于awk自身引入文件的行數
也可以放到for中來控制讀取的次數
> 0 測試讀取的返回值,成功返回1,失敗返回-1,0文件末尾

?

從命令輸出中輸入
[root@stu254 ~]# awk 'BEGIN {"uname -a"|getline ;print $3}'
2.6.18-53.el5
[root@stu254 ~]#

?

?

?


system(command)
系統命令要用""引起來
[root@stu254 ~]# rm -rf abc/
[root@stu254 ~]# awk 'BEGIN {if(system("mkdir abc") != 0 ) print "ERR"}'
[root@stu254 ~]# awk 'BEGIN {if(system("mkdir abc") != 0 ) print "ERR"}'
mkdir: 無法創建目錄 “abc”: 文件已存在
ERR
[root@stu254 ~]#
[root@tch254 ~]# awk 'BEGIN {if(system("mkdir abc 2>/dev/null") != 0 ) print "ERR"}'
ERR
[root@tch254 ~]#

?

awk腳本的介紹 -f 與 #!/bin/awk -f

?

使用awk添加系統用戶
[root@mail ~]# cat useradd.awk
#!/bin/awk -f

?

{
system("useradd "$1";echo "$2"|passwd --stdin "$1)
}
[root@mail ~]# cat username
myname 1234
[root@mail ~]#
[root@mail ~]# ./useradd.awk ./username
Changing password for user myname.
passwd: all authentication tokens updated successfully.
[root@mail ~]#

?

1.使用:或/符號做分隔符,將字段逆序輸出/etc/passwd文件的每行2. # awk -F: 'NR < 11 {print $3,$1}' /etc/passwd > name.txt # awk -F: 'NR < 11 {print $3,$6}' /etc/passwd > home.txt # join name.txt home.txt 觀察兩個文件,以及join命令輸出,用awk引入name.txt,home.txt兩個文件,模擬joni命令的輸出3.統計/etc/passwd中每種shell的被使用人數 輸出格式: counts shell 1 1 /bin/sync 4 /bin/bash 31 /sbin/nologin 1 /sbin/halt 1 /sbin/shutdown4.統計ps中RSZ,VSS各自總和 輸出格式: ps MEM statistic VSZ_SUM : 164.277M RSS_SUM : 47.8555M5.計算/etc/passwd中所有用戶的UID平均數,以及GID平均數. 輸出格式: UID and GID AVG UID-AVG : 1750.72 GID_AVG : 17546. 根據uid值給用戶分等級 Admin system users 輸出格式:LEVEL NAMEAdmin root sysuser bin users sekeradmin_count: N sys_user_count: N users_count: N 7. 分別用GREP,SED,AWK將ifconfig中匹配到eth1的網卡所有信息打印出來.8. SHELL實現批量建立多個文件,將文件拓展名加上.txt,再加上.doc,再把中間的.txt去掉 9. AWK腳本實現間隔五行打印表頭 [root@mail ~]# ./awk_print.sh /etc/passwd Username Uid root 0 bin 1 daemon 2 adm 3 lp 4 Username Uid shutdown 6 halt 7 mail 8 news 9 uucp 10 10.用$RANDOM產生100個隨機數,交給AWK產生數組,在數組內部排序,最后輸出.(禁止用sort命令)11. 建立 aa.txt 文本 # cat aa.txt aaa/bbb/ccc ddd/eee/fff ggg/hhh/iii aaa/bbb/ccc/aaa/bbb/ccc/ddd/eee # 用AWK或SED輸出如下格式 ccc aaa/bbb/ fff ddd/eee/ iii ggg/hhh/ eee aaa/bbb/ccc/aaa/bbb/ccc/ddd/12. 建立 a.txt b.txt 文件 [root@tch254 ~]# cat a.txt 1 a 2 b 3 c 4 d 5 e 6 f 7 g [root@tch254 ~]# cat b.txt 5 ABC 3 DEF 4 XYZ [root@tch254 ~]# 使用AWK處理兩個文件輸出如下結果 e ABC c DEF d XYZ [root@tch254 ~]# awk選做作業

五 其他補充

11111111111 2222222222 333333333 4444444444 55555555555 aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa 99999999999999 99999999999999 99999999999999 99999999999999 99999999999999 99999999999999 99999999999999 aaaaaaaaaa 6666666666 777777777777 888888888888 aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa 99999999999999 aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa test文件內容

?

[root@MiWiFi-R3-srv ~]# cat test |sort |uniq #排序去重
11111111111
2222222222
333333333
4444444444
55555555555
6666666666
777777777777
888888888888
99999999999999
aaaaaaaaaa


[root@MiWiFi-R3-srv ~]# cat /etc/passwd |cut -d: -f2

[root@MiWiFi-R3-srv ~]# find / -size +2M -type f -name \*.txt

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

  

轉載于:https://www.cnblogs.com/linhaifeng/p/6596660.html

總結

以上是生活随笔為你收集整理的Shell第二篇:正则表达式和文本处理工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

九九久久久久99精品 | 久久久国产精品麻豆 | 日日干日日色 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 欧美网址在线观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 99久久超碰中文字幕伊人 | 免费av视屏| 九九九热精品免费视频观看 | 97在线成人 | 国产成人精品日本亚洲999 | 97超碰在 | 激情综合网天天干 | 丁香婷婷激情国产高清秒播 | 黄色亚洲片 | 中文字幕一区二区三区在线视频 | 久草免费看 | 麻豆网站免费观看 | 国产精品久久久久av福利动漫 | 国产二区视频在线观看 | 三级在线视频观看 | 国产精品成久久久久 | 国产 日韩 欧美 在线 | 九色精品在线 | 九九日九九操 | 偷拍区另类综合在线 | 久草视频在线看 | 97超碰人人看 | 狠狠干婷婷色 | 国产一级片网站 | 亚洲精品视频在线观看免费视频 | 激情丁香久久 | 97人人澡人人爽人人模亚洲 | 国产99久久精品 | 蜜桃麻豆www久久囤产精品 | 精品国产亚洲在线 | 香蕉色综合 | 久久五月婷婷综合 | 精品一二三四五区 | 国产美女网站视频 | 在线精品视频免费观看 | 国产精品久久一区二区三区不卡 | 欧美一二三区在线观看 | 欧美精品国产精品 | 狠狠网 | 在线观看黄色 | 91精品导航 | av高清一区二区三区 | 日韩欧美国产激情在线播放 | 久久国产热视频 | 久久精品亚洲综合专区 | 日本女人b| 免费三级黄色片 | 久久久精品高清 | 2024国产精品视频 | 97电院网手机版 | 免费亚洲电影 | 国产一二三四在线视频 | 免费视频久久久 | 亚洲一区久久久 | 国产精品久久久久久久午夜片 | 成人啪啪18免费游戏链接 | 国产精品theporn | 午夜美女wwww | 手机av在线网站 | 丝袜美腿亚洲 | 天天综合久久 | 国产在线a视频 | 一区二区三区精品在线视频 | 亚洲砖区区免费 | 激情综合久久 | 黄污网站在线观看 | 日韩在线视频网站 | 免费在线观看成人av | 久久8精品 | 国产精品99久久99久久久二8 | aav在线 | 91大神精品视频 | 日韩精品一区二区三区第95 | www.亚洲精品 | 国产专区视频在线观看 | 国产精品男女视频 | 日韩中文字幕视频在线 | 91免费在线视频 | 黄色网址国产 | 天天射综合网站 | 色噜噜日韩精品一区二区三区视频 | 国产高清久久久 | 国产精品9999 | 91免费黄视频 | 黄色一级在线视频 | 亚洲视频一区二区三区在线观看 | 狠狠色伊人亚洲综合网站野外 | 日本三级国产 | 91中文字幕网 | 一区二区三区免费在线播放 | www.eeuss影院av撸 | 日韩中文在线观看 | 99精品国产免费久久 | 国产盗摄精品一区二区 | 色婷在线| 色婷婷av一区 | 亚洲精品视频第一页 | 国产一级二级在线观看 | 国产色婷婷精品综合在线手机播放 | 一区二区激情视频 | 99精品影视 | 五月天com | 欧美资源在线观看 | 国产免费一区二区三区网站免费 | 麻花豆传媒mv在线观看 | 日韩中文字幕免费视频 | 99久久精品国产欧美主题曲 | 日韩av综合网站 | 96看片| 亚洲成人av免费 | 久草网免费 | 69国产盗摄一区二区三区五区 | 国产精品不卡在线观看 | 青青草国产精品 | 亚洲精品66 | 日韩电影在线观看一区二区三区 | 久草| 欧美少妇影院 | 草久在线视频 | 一级淫片a | 婷婷成人亚洲综合国产xv88 | 亚洲综合网站在线观看 | 中文字幕永久免费 | 国产精品久久久久影视 | 最新中文字幕在线观看视频 | 81精品国产乱码久久久久久 | 黄色不卡av | 视频一区二区免费 | 天天综合网在线观看 | 五月婷婷丁香在线观看 | 99国产视频在线 | 麻豆av一区二区三区在线观看 | 狠狠色丁香婷婷综合基地 | 91中文字幕一区 | www.久草视频| 日韩久久精品一区二区 | 午夜久久久久 | 男女视频国产 | 成人中文字幕在线观看 | 午夜精品一区二区三区免费视频 | 黄色片网站 | 91精品成人 | 日韩在线免费高清视频 | 91av久久 | 91成人免费在线 | 四虎国产精品永久在线国在线 | 久久国产免费 | 五月天电影免费在线观看一区 | 国产成人久久精品 | 免费高清在线视频一区· | 日本九九视频 | 色婷婷av一区二 | 国产免费久久久久 | 四虎在线免费观看 | 麻豆精品视频在线观看免费 | 国精产品满18岁在线 | 91视频在线免费 | 人人插人人看 | 精品国产一区二区三区久久久蜜臀 | 日日操操 | 久久在线| 国内成人综合 | www.国产在线视频 | 全久久久久久久久久久电影 | 国产福利一区二区在线 | 国产一级一片免费播放放 | 99热精品免费观看 | 黄色毛片视频 | a色视频 | 免费在线国产精品 | 国产又粗又猛又色又黄视频 | 久久精品二区 | 久久综合加勒比 | 九九免费在线观看 | 一本一本久久a久久精品综合妖精 | 狠狠干激情| 午夜资源站| 国产一级做a爱片久久毛片a | 久草视频免费在线播放 | 午夜电影久久 | 日韩精品播放 | 91精品国产欧美一区二区成人 | 国产在线精品福利 | 天天操天天草 | 日本韩国精品在线 | 国产精品久久久久久久久大全 | 久久久久在线观看 | 欧美久久久久 | 992tv在线| 九九热视频在线 | 国产精品久久久久久久婷婷 | 亚洲免费成人 | 狠狠干夜夜爽 | 超碰人人做 | 国产成人在线观看 | 九九热只有这里有精品 | 欧美二区在线播放 | 又黄又爽又色无遮挡免费 | 美女黄频视频大全 | 少妇啪啪av入口 | 天天干天天做天天爱 | 国产高清不卡av | 国产精品乱码久久久 | 亚洲精品国产精品国自产观看 | 免费特级黄色片 | 最新99热| 天天插天天干天天操 | 午夜在线看片 | 国产视频 亚洲视频 | 国产高清中文字幕 | 精品中文字幕在线 | 色播五月婷婷 | 日韩中文字幕在线看 | 亚洲 欧洲av | 97在线影院 | 欧美最猛性xxxxx(亚洲精品) | 青青草国产成人99久久 | 亚洲欧美视频网站 | 国产精品99久久久久久武松影视 | 九九免费在线观看 | 国产精品一区免费看8c0m | 91精品第一页 | 91视频在线观看免费 | 久久久久久久久免费视频 | 麻豆视频国产精品 | 中文字幕在线看视频国产中文版 | 国产精品乱码一区二区视频 | 在线观看精品黄av片免费 | www日日夜夜 | 国产精品久久久久一区二区三区共 | 久久久精品久久日韩一区综合 | 不卡视频在线 | 国内精品久久久久久久久 | 美女网站视频免费黄 | 一区二区三区在线免费播放 | 午夜精品久久久久久久久久久久久久 | 激情开心| 黄色一二级片 | 亚洲第一av在线 | 九热在线 | 免费日韩在线 | 在线观看免费色 | 成人综合免费 | 国产高清不卡av | 中文资源在线播放 | 国产激情电影综合在线看 | 国产一区在线精品 | 亚洲精品国产第一综合99久久 | 成年人电影毛片 | 91香蕉亚洲精品 | 欧美午夜一区二区福利视频 | www日日| 成人免费电影 | 国产精品永久免费在线 | 尤物97国产精品久久精品国产 | 国产大片免费久久 | 天干啦夜天干天干在线线 | 亚洲欧美日韩国产一区二区三区 | 亚洲电影一级黄 | 亚洲精品视频国产 | 亚洲精品视频二区 | 国产成人精品一区二区三区福利 | 激情综合网天天干 | 中文在线字幕免费观 | 久在线观看视频 | 99在线国产| 婷婷av在线| 麻豆一区二区 | 五月天综合网站 | 在线视频99 | 狠狠地操 | 久久电影日韩 | 国产中文字幕亚洲 | 日韩毛片精品 | 久久久美女 | 国产又粗又猛又爽又黄的视频免费 | 久久精品96 | 国产综合精品一区二区三区 | 国产精品美女久久久久久2018 | 黄色片网站av | 日日夜夜免费精品视频 | 97在线观看免费视频 | 最新真实国产在线视频 | 日韩欧美有码在线 | 国产黄色在线 | 久久国产精品一区二区 | 99久久精品国产亚洲 | 国产精品热 | 99热99re6国产在线播放 | 波多野结衣视频在线 | 91亚洲夫妻 | 日韩三级在线观看 | 奇米影音四色 | 91麻豆文化传媒在线观看 | 91视频国产高清 | 中文字幕国产在线 | 天天躁日日躁狠狠躁 | 中文字幕网站 | 国产精品99久久久久久小说 | 美女视频a美女大全免费下载蜜臀 | 五月天婷亚洲天综合网精品偷 | 91成人区 | 人人天天夜夜 | 黄色成人av网址 | 国产一级片直播 | 亚洲一级免费电影 | 日韩精品一区二区不卡 | 五月丁香 | 成 人 黄 色 视频免费播放 | 91九色蝌蚪视频在线 | 97成人精品视频在线观看 | 欧美91精品久久久久国产性生爱 | 黄色av电影| 91av视频网站| 婷婷精品国产欧美精品亚洲人人爽 | 亚洲五月综合 | 亚洲成人av电影在线 | 日韩在线免费小视频 | 99在线观看免费视频精品观看 | 国产精品成人免费精品自在线观看 | 中文字幕91视频 | 午夜色影院 | 中文字幕国产精品一区二区 | 91精品国产亚洲 | 亚洲涩涩色 | 欧美日韩高清在线一区 | 亚洲a网 | 又黄又爽又无遮挡的视频 | 麻豆精品视频在线 | 亚洲精品一区二区三区新线路 | 欧美日产在线观看 | 免费在线观看成人av | 在线观看视频在线观看 | 免费大片黄在线 | 久久综合精品国产一区二区三区 | 这里只有精彩视频 | 欧美午夜久久 | 日韩在线免费视频观看 | 欧美精品在线免费 | 日日夜夜狠狠 | 手机在线永久免费观看av片 | 成人免费在线播放视频 | 不卡av在线播放 | 91成人看片| 黄色av免费看 | 亚洲免费在线观看视频 | 福利网在线 | 国产精品自在线拍国产 | 激情丁香 | 高清av免费看 | 国产不卡在线 | 永久免费精品视频 | 日本视频高清 | 免费看亚洲毛片 | 国产精品你懂的在线观看 | 伊人网av| 午夜精品久久久久99热app | 91av短视频| 性色va | 中国精品少妇 | 91av免费在线观看 | 97视频免费播放 | 亚洲高清视频在线观看 | 狠狠色丁香婷综合久久 | 久久只有精品 | 精品国产亚洲在线 | 奇米导航 | 亚洲国产一二三 | 国产在线一线 | h视频在线看 | aaa日本高清在线播放免费观看 | 高清不卡免费视频 | 亚洲五月激情 | 成人午夜电影网 | 高清av影院 | 91久久国产综合精品女同国语 | 西西444www大胆高清图片 | 国产色女人| 91伊人影院 | 国产精品美乳一区二区免费 | 91精品国产综合久久福利 | 亚洲综合导航 | 99久久婷婷国产 | 色偷偷网站视频 | 看全黄大色黄大片 | 999成人 | 香蕉久久久久久av成人 | 96视频在线| 久久久久久久久久久免费 | 深爱婷婷久久综合 | 四虎国产精 | 99在线视频精品 | 成年人免费看片网站 | 91在线文字幕 | 欧美日韩一区二区视频在线观看 | 天天躁天天躁天天躁婷 | 超碰九九| 99色网站 | 欧美性生爱 | 亚av在线| 91视频 - 88av| 久久久www成人免费毛片麻豆 | 精品91| 99成人在线视频 | 在线不卡视频 | 婷婷亚洲五月 | 久久在线观看视频 | 日韩在线国产 | 蜜桃视频成人在线观看 | 欧美一区二区在线免费观看 | www.香蕉视频在线观看 | 91自拍91 | 久久怡红院| 亚洲人人精品 | 日本精品视频网站 | 一区二区三区在线不卡 | av免费在线观 | 成人午夜网址 | 欧美激情精品一区 | 中文字幕在线观看日本 | 成年人天堂com | 最新日韩视频 | 久久综合狠狠综合久久综合88 | 高清免费在线视频 | 婷婷丁香狠狠爱 | 亚洲国产97在线精品一区 | 久久一区二区三区四区 | 伊人黄 | 在线天堂日本 | 91在线免费看片 | 91传媒在线 | 国产亚洲精品久久久久久移动网络 | 狠狠婷婷 | 国产一级久久 | 激情综合六月 | 日日婷婷夜日日天干 | 韩国av免费在线 | 五月婷婷综合激情 | 婷婷在线免费 | 六月激情网 | 久草精品资源 | 91精品啪在线观看国产线免费 | 国产中文字幕在线播放 | 在线成人观看 | 亚洲午夜电影网 | 午夜丁香网 | 国产精品一区二区三区视频免费 | 欧美色图视频一区 | 在线视频亚洲 | 97超碰人人在线 | 欧美激情精品久久久久久 | 一区二区中文字幕在线播放 | 国产在线 一区二区三区 | av免费网 | 日本精品久久久久影院 | 国产不卡免费 | 国产精品久久久久999 | 国产激情电影综合在线看 | 韩国一区二区三区视频 | 成人a级黄色片 | 丁香花中文字幕 | 99视频免费| 亚洲h在线播放在线观看h | 国产人成免费视频 | 国产精品a久久 | 在线看91| 六月天色婷婷 | 精品特级毛片 | 午夜av电影| www.色国产| 中文字幕av一区二区三区四区 | www.888.av | 九九九在线观看 | av中文字幕在线电影 | 国产精品成人自产拍在线观看 | 爱爱一区 | 成人在线免费观看网站 | 国产精品免费久久久久久 | 中文字幕中文中文字幕 | 黄色特级一级片 | 97日日碰人人模人人澡分享吧 | 国产精品麻豆视频 | 黄色h在线观看 | 天天色成人 | 精品毛片在线 | 五月激情综合婷婷 | 一色av| 国产精品一区二区三区四 | 99热精品视| 99日韩精品| 丝袜美腿在线视频 | 久久理伦片 | 久久美女高清视频 | 特级黄录像视频 | 欧美午夜久久 | 久久资源总站 | 日韩一级黄色av | 久久综合偷偷噜噜噜色 | 亚洲理论在线 | 美女久久久久 | 江苏妇搡bbbb搡bbbb | 日韩精品中文字幕在线播放 | 在线免费观看欧美日韩 | 欧美福利片在线观看 | 青青河边草手机免费 | 欧美美女激情18p | www.国产在线视频 | 黄色小说网站在线 | 国产分类视频 | .国产精品成人自产拍在线观看6 | 午夜视频福利 | 日韩专区av| 天天综合天天做 | 一区二区三区中文字幕在线 | 黄色三级网站 | 亚洲国产中文在线观看 | www天天干com | 97国产精品视频 | 国产精品中文久久久久久久 | 欧美高清视频不卡网 | 日日躁你夜夜躁你av蜜 | 综合网欧美 | 欧美中文字幕第一页 | 国产91九色视频 | 久久网站免费 | 最近中文字幕大全 | 91网站在线视频 | 久久成人麻豆午夜电影 | 99视频在线免费看 | 激情五月***国产精品 | 又黄又爽免费视频 | 久久久网址 | 亚洲精品videossex少妇 | 一区二区三区视频 | 四虎免费在线观看视频 | 免费看一级黄色大全 | 在线免费观看成人 | 色a网| 狠狠干狠狠艹 | 在线中文字幕观看 | 中文字幕免费高清av | 婷婷六月天综合 | 久久一区二区三区四区 | 欧美在线视频日韩 | 国产精品国产三级国产aⅴ无密码 | 午夜av一区二区三区 | 国产精品扒开做爽爽的视频 | 91亚洲精品久久久 | 日韩久久久久久久久 | 狠狠狠狠狠狠干 | 精品一二区 | 婷婷色资源 | 国产日韩欧美视频在线观看 | 免费91麻豆精品国产自产在线观看 | 人人爽人人爽人人爽人人爽 | 91精品久久久久久久久 | 国产一区二区高清视频 | 久草在线官网 | 精品国产激情 | 国内精品久久久久久久久久清纯 | 色婷婷伊人 | 成片视频免费观看 | 久久国内精品99久久6app | 四虎www| 成人一区二区三区在线观看 | 国产露脸91国语对白 | 国产精品尤物视频 | 久草电影在线观看 | 国产精品毛片久久久久久久久久99999999 | 欧美一级激情 | 欧美 高跟鞋交 xxxxhd | 中文字幕 91 | 亚洲三级网站 | 亚a在线 | 奇米影视8888在线观看大全免费 | 97狠狠操 | 欧美日本国产在线观看 | 免费高清在线视频一区· | 日韩特黄一级欧美毛片特黄 | 成人黄色小视频 | 国产视频欧美视频 | 亚洲欧美日韩不卡 | 亚洲精品网址在线观看 | 免费aa大片| 最近免费中文字幕大全高清10 | a在线免费观看视频 | 亚洲在线成人精品 | 免费观看完整版无人区 | 国产日产精品一区二区三区四区 | 在线观看亚洲成人 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 久久九九免费 | 日韩一级成人av | 日韩视频图片 | 久久久国产毛片 | 国产精品自在欧美一区 | 国产精品第十页 | 日韩中文字幕免费在线播放 | 久久久久国产一区二区三区四区 | 亚洲精品国产品国语在线 | 9在线观看免费高清完整版在线观看明 | 久久精品aaa| 中文字幕亚洲五码 | 久久精品伊人 | 日韩区视频 | 欧美一级片在线免费观看 | 国内99视频 | 日日夜夜免费精品 | 精品久久网 | 高清中文字幕av | 精品视频一区在线观看 | 黄网站a | 日韩精品免费一线在线观看 | 黄色的网站免费看 | 亚洲精品久久久蜜桃 | 国产婷婷久久 | 韩国在线视频一区 | 黄色免费观看视频 | a视频在线观看免费 | 亚洲一区欧美激情 | 日韩欧美国产视频 | 最新午夜电影 | 国内成人av | 亚洲综合丁香 | 国产精品一区二区在线播放 | 国产3p视频 | av看片在线观看 | 久久国产电影院 | 一区二区三区免费在线播放 | 国产精品一区二区久久国产 | 狠狠色伊人亚洲综合成人 | 激情五月看片 | 中文字幕丝袜美腿 | 国产欧美精品一区二区三区 | 婷婷综合导航 | 日韩欧美视频免费观看 | 亚洲三级毛片 | 国产一级免费播放 | 一区二区欧美在线观看 | 色婷婷综合成人av | 日韩欧美v | 久久成人久久 | 狠狠色噜噜狠狠狠合久 | 美女网站在线观看 | 天天天天干 | 五月婷婷丁香在线观看 | 日韩在线观看视频中文字幕 | 97av在线 | 亚洲在线视频播放 | av在线免费播放网站 | 色婷婷av一区二 | 99精品成人 | 色狠狠综合 | 婷婷丁香激情综合 | 好看av在线| 欧美做受高潮1 | 一区二区三区免费看 | 久久这里精品视频 | 免费三级黄 | 久久久免费少妇 | 怡红院av久久久久久久 | 精品久久九九 | 日韩av一区二区在线 | 麻花豆传媒mv在线观看网站 | av中文字幕网站 | 97免费在线观看视频 | 欧美日韩性视频 | 欧美日韩中文视频 | 一区二区三区手机在线观看 | 天天草网站 | 天天干天天综合 | 中文字幕在线播放一区 | 欧美成人xxxx | 久草视频在线免费播放 | 国产精品成人自产拍在线观看 | 欧美精品久久人人躁人人爽 | 欧美男同视频网站 | 日韩有码在线观看视频 | 日韩在线视频观看免费 | 国产一级黄 | 欧美日韩高清一区二区 国产亚洲免费看 | 亚洲综合色播 | 最新黄色av网址 | 天天插天天操天天干 | 又黄又刺激视频 | 91理论片午午伦夜理片久久 | av片一区| www.超碰 | 亚洲a在线观看 | 成人一区不卡 | 999久久久免费精品国产 | 国产第一页福利影院 | 日韩欧美第二页 | 久久久人人爽 | 婷婷精品进入 | 国产高清网站 | 久久国产精品99久久人人澡 | 亚洲h色精品 | 97精品国产97久久久久久春色 | 久精品视频免费观看2 | 久草在线91 | 综合久久五月天 | 婷婷精品国产一区二区三区日韩 | 中中文字幕av在线 | 91高清免费看 | 色婷婷福利| 999成人精品 | 婷婷色五| 国产综合小视频 | 中文字幕在线观看第三页 | 热久在线 | 日韩色av色资源 | 国产精品不卡在线播放 | 日日干天天爽 | 一级黄色片在线观看 | 成人在线视频免费看 | 色狠狠狠| 日本久久久久久久久久久 | 国产一区免费看 | 久久夜色精品国产欧美乱极品 | 射久久久 | 丁香花在线视频观看免费 | 国产精品免费观看视频 | 五月婷婷电影网 | 国产精品久久久久久久久久久久午夜片 | 国产美女精彩久久 | 天天做天天爱天天综合网 | 日韩精品视频在线免费观看 | 九草视频在线 | 夜色资源站国产www在线视频 | 天干啦夜天干天干在线线 | 黄色福利| 中文字幕久久精品亚洲乱码 | 成人av免费在线观看 | 中文字幕高清在线播放 | 国产伦精品一区二区三区在线 | 日日操天天射 | 五月天丁香亚洲 | 精品视频区 | 91成版人在线观看入口 | av福利网址导航 | 黄色精品一区二区 | 亚州激情视频 | 日韩高清观看 | 在线观看视频精品 | 国产在线日韩 | 中文字幕一区二区三 | 久久免费在线观看 | 天天激情在线 | 91粉色视频| 少妇bbw撒尿 | 伊人影院在线观看 | 色综合久久88色综合天天免费 | 国产精品永久在线 | 在线视频专区 | 国产99久久久久 | 99久久网站| 久草电影在线观看 | 美女视频黄是免费的 | 波多野结衣视频一区 | 免费在线观看国产黄 | 国产精品久久久久久久久久 | 日韩精品视频免费专区在线播放 | 日韩一区二区三区观看 | 你操综合 | 在线观看片 | 91九色在线观看 | 日本午夜在线观看 | 69精品在线观看 | 在线视频国产区 | 国产成视频在线观看 | 四虎永久免费在线观看 | 欧美性生活小视频 | 黄网站免费看 | 亚洲1区在线 | 日本一区二区不卡高清 | 日本特黄一级 | 欧美一级电影片 | 国产精品99久久免费黑人 | 激情喷水| 日韩在线观看视频中文字幕 | 久久婷婷丁香 | 在线视频第一页 | 六月久久婷婷 | 91久久偷偷做嫩草影院 | 九九九九九九精品 | 亚洲日本在线视频观看 | 国产成人一区在线 | 日韩在线视频一区二区三区 | 五月开心激情 | 日韩网站免费观看 | 婷婷综合激情 | 丁香在线观看完整电影视频 | 91精品国产九九九久久久亚洲 | 91av在线播放视频 | 日本中文字幕在线播放 | 亚洲综合在线五月天 | 亚洲欧美日本一区二区三区 | 97超碰国产在线 | 中国美女一级看片 | 国产一区二区在线免费观看 | 日韩在线小视频 | 国产成人精品一区二区三区福利 | 99亚洲国产精品 | japanesefreesexvideo高潮| 免费观看黄色av | 国产护士hd高朝护士1 | 国产美腿白丝袜足在线av | 欧美午夜精品久久久久久孕妇 | 亚洲欧洲中文日韩久久av乱码 | av在线a| 国产98色在线 | 日韩 | 日日日操 | 天天爽天天碰狠狠添 | 就要干b| 国产成人在线网站 | 婷婷丁香激情网 | 伊人婷婷| 美女福利视频在线 | 国产精品美女久久久久久久 | 亚洲精品视频在线播放 | 91 | 国产在线视频在线观看 | 久久久精品欧美一区二区免费 | 伊色综合久久之综合久久 | 国产精品孕妇 | 国产精品自在线 | 亚洲成av人片一区二区梦乃 | av中文在线观看 | 丝袜精品视频 | 亚洲精品在线免费观看视频 | 1000部国产精品成人观看 | 麻豆视频免费看 | 在线观看视频一区二区三区 | 日韩中文字幕视频在线观看 | 免费观看的黄色片 | 97在线观看免费视频 | 国产成人av综合色 | 一区二区精品在线视频 | 日韩在线电影一区二区 | 日本在线观看中文字幕无线观看 | 天海冀一区二区三区 | 国产精品1区 | 国产精品一级视频 | 黄色一级动作片 | 爱色av.com| 一区二区三区日韩视频在线观看 | av免费高清观看 | 超碰激情在线 | 亚洲综合欧美激情 | 1024在线看片 | 日本91在线 | 狠狠的干狠狠的操 | 亚洲综合导航 | 日韩综合色 | 五月婷婷丁香在线观看 | 91av免费观看 | 色婷av | 91精品视频免费在线观看 | 国产在线永久 | 91在线视频播放 | 欧美日韩中文在线视频 | 人人爽人人爽人人 | 欧美性大胆| 久久人人97超碰国产公开结果 | 天天操天天色天天 | 婷婷六月在线 | 99欧美视频 | 久久99深爱久久99精品 | 精品视频99 | 黄色成人在线观看 | 在线观看视频你懂的 | 欧美aa级| 国产精品成人免费一区久久羞羞 | 欧美a级一区二区 | 视频在线国产 | 午夜久久久久 | 波多野结衣在线播放一区 | 超碰av在线播放 | 韩国av电影在线观看 | 最近中文字幕第一页 | 国产精品 999 | 福利视频入口 | 国产福利91精品一区二区三区 | 91精品在线播放 | 久久久久国产成人免费精品免费 | 久99久视频 | 精品国产一区二区三区av性色 | 日韩超碰在线 | 国产精品一区二区免费视频 | 8x8x在线观看视频 | 国产成人免费网站 | 1024手机在线看 | 久久在草 | 日韩欧美在线一区二区 | 99视频精品 | 精品五月天 | 久久久综合 | av成人亚洲| 免费观看的黄色 | 国产免码va在线观看免费 | 亚洲特级毛片 | 91久久国产自产拍夜夜嗨 | 国产亚洲在线视频 | 99久久精品电影 | 91成人在线观看高潮 | 国产v视频 | 国产麻豆精品一区 | 国产精品永久免费在线 | 182午夜在线观看 | 开心综合网 | 日韩在线观看视频一区二区三区 | 在线小视频你懂的 | 夜又临在线观看 | 91精品国自产拍天天拍 | 精品国产成人av在线免 | 欧美一区二区三区四区夜夜大片 | 天天操福利视频 | 日本性动态图 | 综合激情伊人 | www.久草视频 | 免费观看丰满少妇做爰 | 中文字幕中文字幕在线中文字幕三区 | 亚洲精品视频免费在线 | 六月色 | 中文字幕在线观看第二页 | 中文字幕一二 | 美女网站黄在线观看 | 久久都是精品 | 久久综合激情 | 午夜在线观看 | 黄色www免费| 精品国产一区二区三区在线 | 国产91亚洲 | 探花视频在线观看免费 | 2018亚洲男人天堂 | 日韩在线观看视频在线 | 99久久精品免费看国产麻豆 | 日韩中文字幕免费在线观看 | 亚洲aⅴ免费在线观看 | 日韩欧美视频在线免费观看 | 九九九热精品免费视频观看 | 丁香视频免费观看 | 国产高清在线视频 | 久久婷婷网 | 日韩国产欧美在线视频 | av大片网站 | 一区二区三区三区在线 | 日韩av视屏在线观看 | 97视频免费| 99热在线国产精品 | 五月综合激情婷婷 | 亚洲专区 国产精品 | 毛片www | 热99在线视频 | 狠狠操综合网 | av成人在线观看 | 天天玩天天干 | 成人一级 | 免费视频一区 | 国产看片免费 | 免费看高清毛片 | 在线观看精品一区 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 91久久精品一区二区三区 | 亚洲va欧美va人人爽春色影视 | 97在线观看免费高清完整版在线观看 | 国产视频 久久久 | 欧美午夜剧场 | 丁香久久婷婷 | 久久国产片 | 最近中文字幕完整高清 | 9色在线视频 | 国产精品乱码高清在线看 | 深夜男人影院 | 中文字幕 国产专区 | 国产亚洲精品久久久久久网站 | 成人黄色小视频 | 国产视频2021 | 91久久国产自产拍夜夜嗨 | 国产91对白在线 | 操高跟美女 | 日韩有色 | 欧美日韩高清在线观看 | 国产精品成人免费 | 久久久片 | 日韩a级免费视频 | 91在线播 | 欧美一区二区三区在线看 | 中文字幕在线观看免费观看 | 99久久精品视频免费 | 国产理论一区二区三区 |