国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了Shell 正則表達式及綜合案例及文本處理工具。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?目錄

一、常規(guī)匹配

二、常用特殊字符

三、匹配手機號

四、案例之歸檔文件

五、案例之定時歸檔文件

六、Shell文本處理工具

1. cut工具

2. awk工具


一、常規(guī)匹配

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

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

cat /etc/passwd | grep root

shell if 匹配,Linux,shell,linux

二、常用特殊字符

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

.

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

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

cat /etc/passwd | grep ^a?

shell if 匹配,Linux,shell,linux

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

cat /etc/passwd | grep e$

shell if 匹配,Linux,shell,linux

例子3:匹配任一個字符

cat /ect/passwd | grep r.t

cat /ect/passwd | grep r..t

shell if 匹配,Linux,shell,linux

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

cat /etc/passwd | grep r.*t

shell if 匹配,Linux,shell,linux

[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之間的任意字符

用法例子看下圖吧:

shell if 匹配,Linux,shell,linux

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

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

shell if 匹配,Linux,shell,linux

三、匹配手機號

我們都知道手機號是由第一位數(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]$

shell if 匹配,Linux,shell,linux

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

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

shell if 匹配,Linux,shell,linux大于小于11位數(shù)字都是不符合的?

四、案例之歸檔文件

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

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

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

#!/bin/bash

# 首先判斷輸入的參數(shù)個數(shù)是否為1
if [ $# -ne 1 ]
then
?? ?echo "參數(shù)個數(shù)錯誤!應(yīng)該輸入一個參數(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

shell if 匹配,Linux,shell,linux

五、案例之定時歸檔文件

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

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

shell if 匹配,Linux,shell,linux

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

六、Shell文本處理工具

1. cut工具

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

基本用法

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

選項參數(shù)

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

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

shell if 匹配,Linux,shell,linux

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

cut -d " " -f 1 cut_test.txt

shell if 匹配,Linux,shell,linux

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

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

shell if 匹配,Linux,shell,linux

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

shell if 匹配,Linux,shell,linux

因為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

shell if 匹配,Linux,shell,linux

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

實例操作

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

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

shell if 匹配,Linux,shell,linux

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

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

shell if 匹配,Linux,shell,linux

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

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

shell if 匹配,Linux,shell,linux

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

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

shell if 匹配,Linux,shell,linux

內(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

shell if 匹配,Linux,shell,linux

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

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

shell if 匹配,Linux,shell,linux文章來源地址http://www.zghlxwxcb.cn/news/detail-795870.html

到了這里,關(guān)于Shell 正則表達式及綜合案例及文本處理工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 正則表達式與正則可視化工具:解密文本處理的利器

    正則表達式與正則可視化工具:解密文本處理的利器

    在計算機科學(xué)和軟件開發(fā)領(lǐng)域,正則表達式是一種強大而靈活的文本處理工具。然而,對于初學(xué)者來說,正則表達式的語法和規(guī)則可能會顯得晦澀難懂。為了幫助初學(xué)者更好地理解和學(xué)習(xí)正則表達式,正則可視化工具應(yīng)運而生。本文將介紹正則表達式的基本概念、語法和應(yīng)用

    2024年02月19日
    瀏覽(27)
  • notepad++配合正則表達式分組模式處理文本轉(zhuǎn)化為sql語句

    notepad++配合正則表達式分組模式處理文本轉(zhuǎn)化為sql語句

    一、正則分組知識點補充 正則分組和捕獲 ():用于分組和捕獲子表達式。 大白話就是()匹配到的數(shù)據(jù),通過美元符號加下標可以獲取該數(shù)據(jù),例如$1、$2, 下標從1開始。 下面的案例就采用該模式處理文本數(shù)據(jù) 二、使用正則的需求背景 有一份報表的數(shù)據(jù),需要把數(shù)據(jù)入庫到m

    2024年02月07日
    瀏覽(26)
  • 正則表達式 (用于靈活匹配文本的表達式)

    目錄 . * 用于匹配任意單個字符,除了換行符。 例如使用正則表達式 a.b, 它可以匹配aab、acb、a#b 用于匹配前一個字符零次或多次。 例如,使用正則表達式 ab*c ,它可以匹配 \\\"ac\\\"、\\\"abc\\\"、\\\"abbc\\\",因為 b* 表示匹配零個或多個字符 \\\"b\\\"。所以,這個表達式可以匹配 \\\"ac\\\"(零個 \\\"b\\\"),

    2024年01月16日
    瀏覽(33)
  • shell 正則表達式詳解

    shell 正則表達式詳解

    目錄 正則表達式 一,什么是正則表達式 二,為什么使用正則表達式 三,如何使用正則表達式 示例: 四,基本正則表達式 基本正則表達式示例: 正則表達式字符集示例: 五,擴展正則表達式 擴展正則表達式示例: 擴展: ? ? ? ?正則表達式是通過一些特殊字符的排列,

    2024年01月17日
    瀏覽(21)
  • shell腳本正則表達式

    shell腳本正則表達式

    聲明: 以下內(nèi)容為個人筆記,內(nèi)容不完全正確,請謹慎參考。 含義: 正則表達式使用的每個單獨字符串來描述、匹配一些列符合語法規(guī)則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。在Linux中,grep,sed,awk等文本處理工具都支

    2024年04月22日
    瀏覽(28)
  • Shell編程之正則表達式

    Linux中的正則表達式(regular expression)和通配符(wildcard)都是用于匹配字符串的工具,但它們之間存在一些區(qū)別和應(yīng)用場景的不同。 正則表達式是描述一種字符串匹配的模式,通過特殊的字符和語法,可以檢查一個字符串是否匹配某種模式,匹配成功后可以進行子串替換、取出符

    2024年02月01日
    瀏覽(21)
  • Linux Shell :正則表達式

    Linux Shell :正則表達式

    先來看一句 Shell 代碼: dpkg --list : dpkg 是 Debian 系列 Linux 發(fā)行版(如 Ubuntu)的包管理工具。 --list 選項用于列出所有已安裝的軟件包。 | :這是一個管道符號,用于將前一個命令的輸出作為后一個命令的輸入。在這里, dpkg --list 的輸出被直接傳遞給 grep 命令。 grep -E -o \\\'cu

    2024年02月08日
    瀏覽(49)
  • 【shell編程入門】正則表達式

    特殊字符 描述 [] 方括號表達式,表示匹配的字符集合,例如? [0-9] 、 [abcde] () 標記子表達式起止位置 * 匹配前面的子表達式零或多次 + 匹配前面的子表達式一或多次 ? 匹配前面的子表達式零或一次 轉(zhuǎn)義字符,除了常用轉(zhuǎn)義外,還有: b ?匹配單詞邊界; B ?匹配非單詞邊

    2024年01月23日
    瀏覽(21)
  • Shell編程基礎(chǔ)(十三)正則表達式

    格式:^ 表達式 $ 在不同的場景下,定義是一樣,但使用要按照具體的命令去調(diào)用,中間的表達式都是通用的 普通元字符 所謂元數(shù)據(jù),就是描述數(shù)據(jù)的數(shù)據(jù),在這里就是描述正則的數(shù)據(jù) ^ 表示正則從字符串 整行 起始位置匹配 ^abc 匹配 以abc開始的字符串 $ 表示正則一直匹配到

    2024年02月14日
    瀏覽(23)
  • Shell通配符和正則表達式

    Shell通配符和正則表達式

    目錄 ???????grep 通配符 正則表達式 grep家族有三大成員分別為: ????????grep:支持使用基本正則表達式。 ????????egrep:支持使用擴展正則表達式。 ????????fgrep:不支持使用正則表達式,即所有的正則表達式中的元字符都將作為一般字符,僅僅 擁有其字

    2024年02月16日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包