模式匹配運算符–Shell

轉載:http://www.firefoxbug.net/?p=722

?

?

Var=/home/firefox/MyProgram/fire.login.name
${Variable#pattern}:如果模式匹配于變量值的開頭處,則刪除匹配的最短部分,并且返回剩下的部分
例子:
[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}:如果模式匹配于變量值的開頭處,則刪除匹配的最長部分,并且返回剩下的部分
例子
[fire]$ echo ${Var##*/}
[fire]$ fire.login.name
[fire]$ echo ${Var##/*/}
[fire]$ fire.login.name
[fire]$ echo ${Var##*.}
[fire]$ name${Variable%pattern}:如果模式匹配于變量值的結尾處,則刪除匹配的最短部分,并且返回剩下的部分
例子
[fire]$ echo ${Var%/*}
[fire]$ /home/firefox/MyProgram
[fire]$ echo ${Var%.*}
[fire]$ /home/firefox/MyProgram/fire.login${Variable%%pattern}:如果模式匹配于變量值的結尾處,則刪除匹配的最長部分,并且返回剩下的部分
例子
[fire]$ echo ${Var%%/*}
[fire]$
[fire]$ echo ${Var%%.*}
[fire]$ /home/firefox/MyProgram/fire${#Variable}:返回$Variable值里的字符長度
[fire]$ echo ${#Variable}
[fire]$ 39#!/bin/bash
#移動當前目錄下所有.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提供了可操作路徑名稱字符串和其它字符串的字符串模式匹配運算符。
注意區分和通配符的區別:http://blog.sina.com.cn/s/blog_ac9fdc0b0101ls9h.html
還有正則表達式的區別:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvqp.html
*********************************************************************************************
# 刪除最小的匹配前綴
## 刪除最大的匹配前綴
%? 刪除最小的匹配后綴
%% 刪除最大的匹配后綴

這些運算符的語法形式如下: ${ varname op pattern } (各種括號,暈了)
注意使用# pattern必須是匹配前綴的模式;
使用%,pattern必須死匹配后綴的模式,不然會出錯;
注意這里的pattern不是正則表達式
*********************************************************************************************
image
這四個操作對它們的用法表達的很清楚了,注意一點//不是正則表達式的模式,而是指匹配name中的/符號。
下面是兩個應用,提取文件的前綴名:
image
**********************************************************************************************
字符串的模式匹配實際上是可以處理任何字符串的匹配,不光光只是路徑名

?


Shell:通配符

?

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

?

?


?

?

Shell:Regex正則表達式

?

正則表達式和通配符,字符串的模式匹配是存在區別的,目前我所知道的是用在grep -E , awk , sed中。
通常使用這種結構 /pattern/ action,對匹配到pattern執行相應的action操作。
*********************************************************************************************
??? 正則表達式是由描述一系列字符串的簡潔的符號組成,正則表達式的基本元素如下:
(1)普通字符:a-z A-Z 0-9 空格 下劃線等字符;
(2)元字符:. * [ ] ^ $ { } \ + ? | ( )等特殊含義的字符;
還有擴展正則表達式,多了+ ?的元字符,但是只在grep -E中有用,sed和awk中不行
*********************************************************************************************
常規正則表達式
(1)/chenhuan/ 精確的匹配chenhuan
image
(2).?可替代任何單個字符
image
(3)* 可替代0個或多個它前面的字符(注意理解和通配符的區別)
image
因為可以匹配0個,所以比較難理解下面這幾個的含義:
image
紅色的表示匹配到的,注意*匹配的是和它前面的字符配套的,a*是匹配“ ”或“aaaa...”,而且注意*試圖尋找最大匹配,注意理解前面的和最后.*的區別,這里的*和通配符中的*很容易搞混,其實正則表達式中.*才等于通配符中*。
(4)[ ] 字符集
.的主要限制是讓你不能指定匹配的字符集,可以使用[a-zA-Z],[0-9],注意這里實際上也只是匹配一個字符:
image
(5)^ 放在[]中表示取反的意思,[^0-9]表示不匹配數字
image
(6)^放在//開頭定位表達式/^chen/表示以chen開頭/chen$/表示以chen結尾:
image
(7)$ 放在末尾表示精確匹配末尾
image
**********************************************************************************************
下面是擴展的正則表達式,gawk和grep -E可以識別擴展的正則表達式,sed不行
(1)? 表示前面的字符可以出現0次或1次
image
(2)+?和*非常相似,但+前的字符必須至少出現一次
image
(3){}?為可重復的正則表達式指定一個上限
m:正則表達式準確出現m次;
m,n:正則表達式至少出現m次,至多n次;
對于gawk,需要使用--re-interval來指定使用匹配區間
image
(4)|?管道符號,實際上就是或的意思
image
(5)()聚合表達式,被()起來的正則表達式模式可以當作標準字符,就是說可以對整個組再來做處理
image

轉載于:https://www.cnblogs.com/pengdonglin137/p/3524471.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

河內塔問題_河內塔的Python程序

河內塔問題You are challenged for a challenge to find the number of moves required to move a stack of disks from one peg to another peg. Wait for a second, it sounds easy? Let’s find are what is going on and in this article, we are introducing a chapter o…

VC6、BC5、G2.9標準分配器一覽

目錄VC6標準分配器BC5標準分配器G2.9標準分配器VC6標準分配器 VCx中源碼可以在電腦路徑中找: [D:\Program Files\VisualStudio\Community\VC\Tools\MSVC\14.28.29333\include\xmemory] 不過太多了。大概在837行左右有關于allocator代碼。還是先看侯捷PPT上的吧。 …

【轉】shell 大括號、圓括號的使用

在這里我想說的是幾種shell里的小括號,大括號結構和有括號的變量,命令的用法,如下: PHP 代碼:1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:string},${var:string},${var:?string} 5.$((exp)) 6.$(var%pattern),$(var%%pattern),$(va…

css clear屬性_CSS中的clear屬性

css clear屬性CSS | 清除財產 (CSS | clear Property) We know so much about float property and how it is used for styling our web pages. If you do not remember the float property, lets help jog your memory. The float property is used to set the elements in a …

linux find prune排除某目錄或文件

http://blog.csdn.net/ysdaniel/article/details/7995681 查找cache目錄下不是html的文件 find ./cache ! -name *.html -type f列出當前目錄下的目錄名,排除includes目錄,后面的-print不能少 find . -path ./includes -prune -o -type d -maxdepth 1 -print排除多個目錄,”(“…

嵌入式指針embedded pointer的概念以及用法

目錄前言概念用法參考前言 在針對一個class寫出它的內存管理池以及總結出allocator類(三個版本)中內存管理池的第二個版本中涉及到了一個非常重要的概念:嵌入式指針。同時嵌入式指針也在G2.9版本的alloc中出現。現在整理一下網上的一些用法和概念 概念 嵌入式指針…

CLI配置和編址

實施基本編址方案: 在設計新網絡或規劃現有網絡時,至少要繪制一幅指示物理連接的拓撲圖,以及一張列出以下信息的地址表: l 設備名稱 l 設計中用到的接口 l IP 地址和子網掩碼 l 終端設備(如 PC)的默…

sql語句中的in用法示例_PHP中的循環語句和示例

sql語句中的in用法示例循環 (Loops) Imagine that we need a program that says "hello world" 100 times. Its quite stressful and boring to write the statement -- echo "hello world" — 100 times in PHP. This is where loop statement facilitate…

love2d教程30--文件系統

在游戲里少不了文件操作,在love2d里我們可以直接用lua自帶的io函數,如果不熟悉可以先讀一下我的lua文件讀寫。 相對lua,love2d提供了更多的函數, 方便我們操作文件。不過可能處于安全考慮,love2d只允許我們訪問兩個目錄…

std::alloc具體細節

G2.9 std::alloc的缺點: 1、在alloc::deallocate中沒有將拿到的內存資源還給操作系統,在多任務中將占用很大資源 2、alloc::deallocate函數沒有檢查傳入的p指針的有效性。在這里它默認p為alloc::allocate取得。 如果p并非alloc::allocate取得&#xf…

修改函數的返回地址

這篇隨筆源自今天看的這篇文章http://www.cnblogs.com/bluesea147/archive/2012/05/19/2508208.html 1. 如何修改函數返回地址 今天主要寫測試程序思考和驗證了一下這個問題&#xff0c;先看一下這個&#xff23;程序 1 #include <stdio.h>2 void foo(){3 int a,…

調試JavaScript代碼

JavaScript調試代碼 (JavaScript debugging the code) Debugging is the process of finding mistakes or bugs in the program. There are several ways one can debug their JavaScript code. This article will walk you through the strict mode in JavaScript and excepti…

Delphi運算符及優先級

單目運算符 (最高優先級) 取變量或函數的地址(返回一個指針) not 邏輯取反或按位取反 乘除及按位運算符 * 相乘或集合交集 / 浮點相除 div 整數相除 mod 取模 (整數相除的余數) as 程序運行階段類型轉換 (RTTI運算符) and 邏輯或按位求和 shl 按位左移 shr 按位右移 加減運算符…

NotifyMyFrontEnd 函數背后的數據緩沖區(二)

message level 函數pq_putmessage調用 low level 函數 pq_putbytes,pq_putbytes調用 internal_putbytes。 從internal_putbyes上來看&#xff0c;就可以發現其數據發送的機制:有一個小技巧&#xff0c;如果數據緩沖區滿了&#xff0c;就發送&#xff0c;否則就先堆在那兒。如果…

從源碼角度剖析VC6下的內存分配與切割的運作

目錄前言1、heap初始化2、第一次分配內存&#xff0c;計算真正區塊大小3、new_region管理中心4、__sbh_alloc_new_group()切割第一次分配好的內存5、開始切割內存前言 malloc與free帶來的內存管理是應付小區塊的&#xff0c;即SBH(small block heap)&#xff0c;這點也可以從源…

windows常見命令整理(持續更新)

windows常見命令整理 1. 文件1.1. 實時顯示文件 logfile.txt 中新添加的內容&#xff08;類似于linux tail -f&#xff09; 2. 網絡2.1. netstat 3. 進程和任務3.1. tasklist &#xff08;用于列出當前運行的進程及其詳細信息&#xff09;3.2. wmic &#xff08;用于執行各種系…

最長公共子序列求序列模板提_最長公共子序列

最長公共子序列求序列模板提Description: 描述&#xff1a; This question has been featured in interview rounds of Amazon, MakeMyTrip, VMWare etc. 這個問題在亞馬遜&#xff0c;MakeMyTrip&#xff0c;VMWare等訪談輪次中都有介紹。 Problem statement: 問題陳述&…

洛必達法則使用條件

使用條件 1、分子分母同趨向于0或無窮大 。 2、分子分母在限定的區域內是否分別可導。 3、當兩個條件都滿足時&#xff0c;再求導并判斷求導之后的極限是否存在&#xff1a;若存在&#xff0c;直接得到答案&#xff1b;若不存在&#xff0c;則說明此種未定式無法用洛必達法則解…

求根號m(巴比倫算法)

巴比倫算法是針對求根號m的近似值情況的&#xff0c;它的思想是這樣的&#xff1a; 設根號mX0,則如果枚舉有答案X(X<X0)&#xff0c;則m/X>X0,當精度要求不高的時候&#xff0c;我們可以看成Xm/XX0,而如果精度要求比較高&#xff0c;我們只需取X和m/X的平均值作為新的枚舉…

Android面試題

http://blog.csdn.net/aomandeshangxiao/article/category/841452 http://www.cppblog.com/life02/category/18316.html轉載于:https://www.cnblogs.com/DonkeyTomy/articles/2598673.html