欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell 正則表達式及綜合案例及文本處理工具詳解

 更新時間:2023年11月17日 10:11:05   作者:會洗碗的CV工程師  
這篇文章主要介紹了Shell 正則表達式及綜合案例及文本處理工具的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

一、常規(guī)匹配

一串不包含特殊字符的正則表達式匹配它自己

例子,比如說想要查看密碼包含root字符串的,可以這樣寫

cat /etc/passwd | grep root

二、常用特殊字符

特殊字符作用
^匹配一行的開頭
$匹配一行的結(jié)束

.

匹配任意一個字符
**不單獨使用,他和上一個字符連用,表示匹配上一個字符0次或者多次
[][]表示匹配某個范圍內(nèi)的一個字符
\表示轉(zhuǎn)義字符,一般和特殊字符連用表示特殊字符本身

例1:匹配以a字符開頭的:

cat /etc/passwd | grep ^a 

例子2:匹配以e字符結(jié)尾

cat /etc/passwd | grep e$

例子3:匹配任一個字符

cat /ect/passwd | grep r.t

cat /ect/passwd | grep r..t

例子4:查詢包含以字符r開頭,t結(jié)尾的字符串

cat /etc/passwd | grep r.*t

[6,8] ------匹配6或者8
[0-9] ------匹配一個0-9 的數(shù)字
[0-9]* ------匹配任意長度的數(shù)字字符串
[a-z] ------匹配一個 a-z 之間的字符
[a-z]* -----匹配任意長度的字母字符串
[a-c,e-f] ---匹配 a-c 或者 e-f之間的任意字符

用法例子看下圖吧:

例子6:假如說我們想查找n_test.sh文件包含$符的那這就需要用到轉(zhuǎn)義字符

cat /scripts/n_test.sh | grep '\$'

三、匹配手機號

我們都知道手機號是由第一位數(shù)字是1,第二位是3,4,5,7,8,9;其余數(shù)字隨便??偣彩晃粩?shù)字,因此我們可以得出

"1569656955" | grep ^1[3,4,5,7,8,9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$

看上圖可以得知,第一個數(shù)字符合手機號形式,而第二個明顯不符合。但是這樣【0-9】太多了,比較繁瑣,我們就可以在后面用一個大括號表示出現(xiàn)次數(shù)來代替重復的0-9;但是要在正則表達式之前加入-E選項,如下:

grep -E ^1[3,4,5,7,8,9][0-9]{9}$

大于小于11位數(shù)字都是不符合的 

四、案例之歸檔文件

實際生產(chǎn)應用中,往往需要對重要的數(shù)據(jù)進行歸檔備份

需求:實現(xiàn)一個目錄歸檔備份的腳本,輸入一個目錄名稱,將目錄下所有文件按天歸檔保存,并將歸檔日期附加在文檔文件名上,放在根目錄下(/archive)
這里用到的歸檔命令: tar

后面可以加上 -c 選項表示歸檔,加上 -z 選項表示同時進行壓縮得到的文件后綴名為 .tar.gz;不過要注意的是可能還是需要加上P選項代表允許我們使用絕對路徑進行歸檔。

#!/bin/bash
# 首先判斷輸入的參數(shù)個數(shù)是否為1
if [ $# -ne 1 ]
then
    echo "參數(shù)個數(shù)錯誤!應該輸入一個參數(shù)作為歸檔目錄名"
    exit
fi
# 從參數(shù)中獲取目錄名稱,查看目錄名稱是否存在
if [ -d $1 ]
then
    echo
else
    echo
    echo "目錄不存在!"
    echo
    exit
fi
# 獲取絕對路徑
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1);pwd)
# 獲取當前日期,歸檔文件名拼接成日期
DATE=$(date +%y%m%d)
# 訂閱生成歸檔文件名稱
FILE=archive_${DIR_NAME}_$DATE.tar.gz
# 訂閱生成歸檔文件的路徑
DEST=/archive/$FILE
# 開始歸檔目錄文件
echo "開始歸檔...."
echo
# -c 歸檔 z 壓縮 f可視化
tar -czPf $DEST $DIR_PATH/$DIR_NAME
# 判斷上面文件歸檔文件操作是否成功
if [ $? -eq 0 ]
then
    echo
    echo "歸檔成功"
    echo "歸檔的文件為:$DEST"
    echo
else
    echo "歸檔出現(xiàn)問題"
    echo
fi
exit

五、案例之定時歸檔文件

比如說我們想要1分鐘歸檔文件一次;就可以設(shè)置定時器如下:

*/1 * * * * /archive/archive_test.sh /scripts

可以看得出確實添加了一個歸檔文件 

六、Shell文本處理工具

1. cut工具

cut 的工作就是“剪”,具體的說就是在文件中負責剪切數(shù)據(jù)用的。
cut 命令從文件的每行剪切字節(jié)、字符和字段并將這些字節(jié)、字符和字段輸出

基本用法

cut [選項參數(shù)] filename

選項參數(shù)

選項參數(shù)功能-f列號,提取第幾列-d分隔符,按照指定分隔符分割列,默認是制表符"\t"-c按字符進行切割,后加n表示取第幾列 比如-c 1

比如一個文本文件有以下詩歌:

比如說我們需要提取第一列,那應該這樣寫,按空格指定分割第一列;如下:

cut -d " " -f 1 cut_test.txt

假如我們想要提取第一和第四列,可以這樣寫: 

cut -d " " -f 1,4 cut_test.txt

比如說我們想知道ens33網(wǎng)卡的所有IP,那么首先應該是ifconfig ens33,然后管道符|,再然后正則表達式獲取ip 最后利用管道符切割。

因為ip在第十列,因此-f后面跟10;整體寫法如下:

ifconfig ens33 | grep netmask | cut -d " " -f 10

2. awk工具

一個強大的文本分析工具,把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行分析處理

基本用法

awk [選項參數(shù)] '/pattern1/{action1}/pattern2/{action2}...' filename

 pattern:表示awk 在數(shù)據(jù)中查找的內(nèi)容,就是匹配模式
action:在找到匹配內(nèi)容時所執(zhí)行的一系列命令

選項參數(shù)功能-F指定文件分割符-v分支一個用戶定義變量

不過有些版本的系統(tǒng)是不支持awk工具的,那么如何查看自己系統(tǒng)是否支持awk只需要輸入以下句子即可:

which awk

出現(xiàn)上面那段話說明你的系統(tǒng)是支持awk工具的

實例操作

1. 搜索passwd文件以root關(guān)鍵字開頭的所有行,并輸出該行的第7列

cat /etc/passwd | awk -F ":" '/^root/ {print $7}'

2. 搜索passwd文件以root關(guān)鍵字開頭的所有行,并輸入該行的第1列和第7列,中
間以","分割

cat /etc/passwd | awk -F ":" '/^root/ {print $1 "," $7}'

3. 只顯示/etc/passwd 的第一列和第七列,以逗號分割,且在所有行前面添加列
名"start"在最后一行添加"over"

 cat /etc/passwd | awk -F ":" '/^root/ {print $1"," $7} END{print "over"}'

4. 將passwd文件中的用戶id增加數(shù)值1并輸出 

cat /etc/passwd | awk -F ":" '{print $3+1}'

內(nèi)置變量

變量說明FILENAME文件名NR已讀記錄數(shù)(行號)NF瀏覽記錄的域的個數(shù)(切割后,列的個數(shù))

示例操作

1. 統(tǒng)計passwd文件名,每行的行號,每列的列數(shù)

cat /etc/passwd | awk -F ":" '{print " 文件名:" FILENAME "\t行號:" NR "\t列數(shù): " NR}' /etc/passwd

2. 查詢ifconfig命令輸出結(jié)果中的空行所在行號

ifconfig | awk '/^$/ {print"空行: " NR}'

到此這篇關(guān)于Shell 正則表達式及綜合案例及文本處理工具的文章就介紹到這了,更多相關(guān)Shell 正則表達式文本處理工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論