日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

模式匹配运算符–Shell

發(fā)布時(shí)間:2023/12/1 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模式匹配运算符–Shell 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載:http://www.firefoxbug.net/?p=722

?

?

Var=/home/firefox/MyProgram/fire.login.name ${Variable#pattern}:如果模式匹配于變量值的開(kāi)頭處,則刪除匹配的最短部分,并且返回剩下的部分 例子: [fire]$ echo ${Var#*/} [fire]$ home/firefox/MyProgram/fire.login.name [fire]$ echo ${Var#/*/} [fire]$ firefox/MyProgram/fire.login.name [fire]$ echo ${Var#*.} [fire]$ login.name${Variable##pattern}:如果模式匹配于變量值的開(kāi)頭處,則刪除匹配的最長(zhǎng)部分,并且返回剩下的部分 例子 [fire]$ echo ${Var##*/} [fire]$ fire.login.name [fire]$ echo ${Var##/*/} [fire]$ fire.login.name [fire]$ echo ${Var##*.} [fire]$ name${Variable%pattern}:如果模式匹配于變量值的結(jié)尾處,則刪除匹配的最短部分,并且返回剩下的部分 例子 [fire]$ echo ${Var%/*} [fire]$ /home/firefox/MyProgram [fire]$ echo ${Var%.*} [fire]$ /home/firefox/MyProgram/fire.login${Variable%%pattern}:如果模式匹配于變量值的結(jié)尾處,則刪除匹配的最長(zhǎng)部分,并且返回剩下的部分 例子 [fire]$ echo ${Var%%/*} [fire]$ [fire]$ echo ${Var%%.*} [fire]$ /home/firefox/MyProgram/fire${#Variable}:返回$Variable值里的字符長(zhǎng)度 [fire]$ echo ${#Variable} [fire]$ 39#!/bin/bash #移動(dòng)當(dāng)前目錄下所有.c文件重命名為file-[Number].c,排序loop=1; while [ $loop -lt 10 ] do file="$loop.c" touch $file let loop++ doneiCounter=1 for temp in *.c do New=file-$iCounter.${temp#*.} mv $temp $New 2> /dev/nullif [ $? -eq 0 ]; then echo "rename $temp to $New" let iCounter++ fi done

?

?


?

shell:字符串模式匹配

?

bash提供了可操作路徑名稱字符串和其它字符串的字符串模式匹配運(yùn)算符。
注意區(qū)分和通配符的區(qū)別:http://blog.sina.com.cn/s/blog_ac9fdc0b0101ls9h.html
還有正則表達(dá)式的區(qū)別:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvqp.html
*********************************************************************************************
# 刪除最小的匹配前綴
## 刪除最大的匹配前綴
%? 刪除最小的匹配后綴
%% 刪除最大的匹配后綴

這些運(yùn)算符的語(yǔ)法形式如下: ${ varname op pattern } (各種括號(hào),暈了)
注意使用# pattern必須是匹配前綴的模式;
使用%,pattern必須死匹配后綴的模式,不然會(huì)出錯(cuò);
注意這里的pattern不是正則表達(dá)式
*********************************************************************************************

這四個(gè)操作對(duì)它們的用法表達(dá)的很清楚了,注意一點(diǎn)//不是正則表達(dá)式的模式,而是指匹配name中的/符號(hào)。
下面是兩個(gè)應(yīng)用,提取文件的前綴名:

**********************************************************************************************
字符串的模式匹配實(shí)際上是可以處理任何字符串的匹配,不光光只是路徑名

?


Shell:通配符

?

通配符,正則表達(dá)式二者的功能很像,但是又確實(shí)不一樣,接觸shell有段時(shí)間了,現(xiàn)在才意識(shí)到它們地不同,囧 。
??? 比起他們的用法,使用范圍其實(shí)更加令人困惑,什么時(shí)候使用的是通配符,什么時(shí)候使用的正則表達(dá)式,一直搞不清楚。
*********************************************************************************************
通配符(模糊文件引用)
????當(dāng)輸入包含特色字符(也稱為元字符)的部分文件名時(shí),shell可以生成已有文件名匹配的文件名(來(lái)自《Linux命令,編輯器與shell編程》P119,難道只通配符的使用只適用于文件名的匹配?)。
??? 這些特殊的字符也稱為通配符,當(dāng)某個(gè)特殊字符作為參數(shù)出現(xiàn)在命令行上時(shí),shell將該參數(shù)擴(kuò)展為有序的文件名列表,并將列表傳遞給命令行的調(diào)用程序。包含特殊字符的文件名稱為模糊文件引用,因?yàn)樗鼈儾灰萌魏我粋€(gè)特定文件,對(duì)這些文件名操作的擴(kuò)展稱為擴(kuò)展路徑名或者通配
======================================================
(1):它與已有文件名的某個(gè)單獨(dú)字符匹配
?
=======================================================
(2)*:它與文件名中的任意多個(gè)(包括0個(gè))字符匹配
?
=======================================================
(3)[ ]:與包含[ ]內(nèi)字符的文件名進(jìn)行匹配
?
========================================================
(4)[! ]或[^ ]:表示該類與任何不在括號(hào)內(nèi)的字符匹配:
?
**********************************************************************************************
??? 在引用文件名的時(shí)候,使用通配符~~~,正則表達(dá)式的內(nèi)容很長(zhǎng),單獨(dú)寫(xiě)一個(gè)文章來(lái)分析。
正則表達(dá)式在這里:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvqp.html

?

?


?

?

Shell:Regex正則表達(dá)式

?

正則表達(dá)式和通配符,字符串的模式匹配是存在區(qū)別的,目前我所知道的是用在grep -E , awk , sed中。
通常使用這種結(jié)構(gòu) /pattern/ action,對(duì)匹配到pattern執(zhí)行相應(yīng)的action操作。
*********************************************************************************************
??? 正則表達(dá)式是由描述一系列字符串的簡(jiǎn)潔的符號(hào)組成,正則表達(dá)式的基本元素如下:
(1)普通字符:a-z A-Z 0-9 空格 下劃線等字符;
(2)元字符:. * [ ] ^ $ { } \ + ? | ( )等特殊含義的字符;
還有擴(kuò)展正則表達(dá)式,多了+ ?的元字符,但是只在grep -E中有用,sed和awk中不行
*********************************************************************************************
常規(guī)正則表達(dá)式
(1)/chenhuan/ 精確的匹配chenhuan

(2).?可替代任何單個(gè)字符

(3)* 可替代0個(gè)或多個(gè)它前面的字符(注意理解和通配符的區(qū)別)

因?yàn)榭梢云ヅ?個(gè),所以比較難理解下面這幾個(gè)的含義:

紅色的表示匹配到的,注意*匹配的是和它前面的字符配套的,a*是匹配“ ”或“aaaa...”,而且注意*試圖尋找最大匹配,注意理解前面的和最后.*的區(qū)別,這里的*和通配符中的*很容易搞混,其實(shí)正則表達(dá)式中.*才等于通配符中*。
(4)[ ] 字符集
.的主要限制是讓你不能指定匹配的字符集,可以使用[a-zA-Z],[0-9],注意這里實(shí)際上也只是匹配一個(gè)字符:

(5)^ 放在[]中表示取反的意思,[^0-9]表示不匹配數(shù)字

(6)^放在//開(kāi)頭定位表達(dá)式/^chen/表示以chen開(kāi)頭/chen$/表示以chen結(jié)尾:

(7)$ 放在末尾表示精確匹配末尾

**********************************************************************************************
下面是擴(kuò)展的正則表達(dá)式,gawk和grep -E可以識(shí)別擴(kuò)展的正則表達(dá)式,sed不行
(1)? 表示前面的字符可以出現(xiàn)0次或1次

(2)+?和*非常相似,但+前的字符必須至少出現(xiàn)一次

(3){}?為可重復(fù)的正則表達(dá)式指定一個(gè)上限
m:正則表達(dá)式準(zhǔn)確出現(xiàn)m次;
m,n:正則表達(dá)式至少出現(xiàn)m次,至多n次;
對(duì)于gawk,需要使用--re-interval來(lái)指定使用匹配區(qū)間

(4)|?管道符號(hào),實(shí)際上就是或的意思

(5)()聚合表達(dá)式,被()起來(lái)的正則表達(dá)式模式可以當(dāng)作標(biāo)準(zhǔn)字符,就是說(shuō)可以對(duì)整個(gè)組再來(lái)做處理

轉(zhuǎn)載于:https://www.cnblogs.com/pengdonglin137/p/3524471.html

總結(jié)

以上是生活随笔為你收集整理的模式匹配运算符–Shell的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。