當前位置:首頁 » 編程軟體 » shell腳本正則表達式

shell腳本正則表達式

發布時間: 2022-02-11 10:05:00

Ⅰ shell腳本,正則表達式,如何批量替換多個文件夾中指定字元中的指定字元

用Replace Pioneer處理很輕松,找到")"和"("之間的內容,把"、"替換成"|"就可以了。 需要說明的是,你的括弧是中文括弧"()"而不是英文括弧"()",所以不用轉義。 以下是詳細步驟: 1. ctrl-o打開待處理txt文件 2. ctrl-h打開replace窗口 * 在Search for pattern下面輸入: "(^|)).*?((|$)"(不包含左右的雙引號) * 在Replace with pattern下面輸入: "replace($match,'、','|')"(不包含左右的雙引號) 3. 點擊Replace,完成。 **************** 另外,這里再給你一個純正則表達式的版本: 把"、(?=[^)]*((|$))"替換成"|"就可以了。 你也可以在Replace Pioneer的search for pattern輸入"、(?=[^)]*((|$))"(無雙引號),然後在replace with pattern輸入|就可以了。

Ⅱ shell腳本編程中expr模式匹配問題,正則表達式中的

正則表達式了解一下就知道了,這個是匹配正、負整數的一個表達式,並且允許 0 出現在前面的數字。可以用下面的語句做測試:

[seesea@UC ~]$ if expr "-3" : '-\?[0-9]\+$' >/dev/null; then echo "match OK"; fi;
match OK
[seesea@UC ~]$
[seesea@UC ~]$ if expr "3" : '-\?[0-9]\+$' >/dev/null; then echo "match OK"; fi;
match OK
[seesea@UC ~]$
[seesea@UC ~]$ if expr "03" : '-\?[0-9]\+$' >/dev/null; then echo "match OK"; fi;
match OK

linux,shell腳本里一個關於正則表達式的問題

因為正則匹配的時候就是這樣的。
看這個:
s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/

\(.*[0-9]\) --> 這是一個組,後面用\1來原封不動地引用
\([0-9]\{3\}\) --> 這又是一個組,後面用\2來原封不動地引用

第一個組匹配以一位數字結尾的任意字元串,第二個組匹配連續的3個數字。
.*是貪婪的,所以,最先匹配得到的是 1234567,890

t start --> 跳轉到start繼續執行,這就是sed中使用循環語句的典型方法。

Ⅳ 請問如何用shell腳本檢驗一個字元串是否匹配一個正則表達式呢

ok=`cat &str | grep "ab*" | wc -l`
檢驗ok的值是0還是1
1就表示存在這匹配串。。。

Ⅳ shell 正則表達式問題

問題描述應該是這樣的:"去除多餘的雙引號,即,對多個連續的雙引號,只保留一個"。

因此,這樣就可以了:

sed-r's/"+/"/g'file.txt

正則中,+表示重復前面一個字元1次或以上(至少一次)。

當然,也可以寫為:

sed-r's/"{2,}/"/g'file.txt

{2,}表示2次或以上。這樣,出現1次的就可以不用處理。

實測結果如下:

Ⅵ shell中如果想匹配應該採用什麼正則表達式

正則表達式在各個編程語言體系中都有使用,其各個規則大概是相同的,但某些語法是根據各個語言體系自己來實現的,比如在java中判斷匹配規則是通過「matches」來實現判斷,則在shell中則是使用「=~」
什麼是正則表達式呢?正則表達式就是能用某種模式去匹配一類字元串的公式,它是由一串字元和元字元構成字元串。所謂元字元,就是用以闡述字元表達式的內容、轉換和描述各種操作信息字元。
正則表達式中的元字元表示

「.」(一個點)符號,用於匹配除換行符以外的任意字元。
[root@localhost ~]# grep 'r..t' /etc/passwd
[root@localhost ~]# grep 'r.t' /etc/passwd

1
2
3
「* 」符號,用於前一個字元0次或者多次。
[root@localhost ~]# grep 'r*t' /etc/passwd
1
「{n,m}」符號,可用於重復匹配前一個字元,但卻不能精確地控制的重復次數
「{n}」 匹配前面的字元n次
[root@localhost ~]# grep 'ro\{2\}' /etc/passwd
1
「{n,}」 匹配前面的字元至少n次以上(含n次)

[root@localhost ~]# grep 'ro\{2,\}' /etc/passwd
1
「{n,m}」 匹配前面的字元n到m次

[root@localhost ~]# grep 'ro\{1,2\}' /etc/passwd
1
"^"符號 匹配的是以字元開頭的行
[root@localhost ~]# grep ^root /etc/passwd
1
「$」符號 用於匹配尾部
[root@localhost ~]# grep 'r.*h$' /etc/passwd
[root@localhost ~]# grep 'r.*h' /etc/passwd
1
2
"[]"符號 用於匹配方括弧內出現的任意字元
「\」符號 用於轉義字元
「<」符號和「>」符號 用於界定單詞的左邊界和右邊界
「\d」符號 匹配一個數字,等價於[0-9] 使用grep匹配這種正則表達式時可能會遇到無法匹配的問題
#成功匹配
[root@localhost ~]# echo 123|grep [0-9]
123
#並未匹配
[root@localhost ~]# echo 123|grep "\d"
#匹配成功 這是因為「\d」是一種Perl兼容模式的表達式,又稱作 PCRE,要想使用這種模式的匹配符,需要加上-P參數
[root@localhost ~]# echo 123|grep -P "\d"
123
1
2
3
4
5
6
7
8
「\b」符號 匹配單詞的邊界
「\B」符號 匹配非單詞的邊界
「\w」符號 匹配字母、數字和下劃線,等價於[A-Za-z0-9]
「\w」符號 匹配非字母、非數字和非下劃線,等價於[^A-Za-z0-9]
「\n」 符號 匹配一個換行符
「\r」符號 匹配一個回車符
「\t」匹配一個製表符
「\f」匹配一個換頁符
「\s」匹配任何空白字元
「\S」匹配任何非空白字元
正則表達式還能表示電話號碼,身份證號碼,域名格式,郵箱格式等等,都是根據元字元進行拼裝組裝,就如英語單詞千千萬都是用字母組成的一樣,用的時候要根據各個規則進行靈活處置。
利用正則表達式怎麼截取字元串呢?
expr - 求一個表達式的值
可以運算加減乘除,儼然是個多功能計算器,字元串表達式的優先順序高於數值表達式和邏輯關系表達式。
運算有很多,本次只針對字元串截取來幾個小demo
『STRING : REGEX』
執行模式匹配。兩端參數會轉換為字元格式,且第二個參數被視為正則表達式(GNU基本正則),它默認會隱含前綴"^"。隨後將第一個參數和正則模式做匹配。
如果匹配成功,且REGEX使用了』(『和』)』,則此表達式返回匹配到的,如果未使用』(『和』)』,則返回匹配的字元數。
如果匹配失敗,如果REGEX中使用了』(『和』)』,則此表達式返回空字元串,否則返回為0。
只有第一個』(…)『會引用返回的值;其餘的』(…)『只在正則表達式分組時有意義。
在正則表達式中,』+』,』?『和』|'分表代表匹配一個或多個,0個或1個以及兩端任選其一的意思。

#返回匹配的個數
[root@localhost ~]# expr aaa : 'a\+'
3
#返回匹配的內容
[root@localhost ~]# expr abc : 'a\(.\)c'
b
#返回匹配的內容
[root@localhost ~]# expr service-core-0.0.1-SNAPSHOT.jar : '\(.*[0-9]\)'
#返回長度
[root@localhost ~]# expr length 'length test is length'
21
#返回截取的長度
[root@localhost ~]# expr substr abcde 2 4
bcde
#加分運算 記得要有空格,不然會原樣輸出
[root@localhost ~]# expr 1 + 2
3
#除發運算
[root@localhost ~]# expr 12 / 2
6
#求模運算
[root@localhost ~]# expr 12 % 5
2
#乘法運算 *作為特殊字元要進行轉譯
[root@localhost ~]# expr 12 \* 5
60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
對於怎麼判斷這個值是否符合正則表達式則用

#注意不能添加符號,只寫表達式即可,添加符號會產生錯誤
if [[ $file =~ .jar$ ]]
then
echo "true"
else
echo false
fi
1
2
3
4
5
6
7
以上是shell中使用正則表達式所引出來的,不會的多去查,Linux命令就是那麼多,使用多了也就記住了,有人說Linux是積沙成塔的過程,慢慢積累,多看幫助文檔, info、man用起來。

Ⅶ Linux Shell正則表達式如何匹配1~3位數字

grep '^[0-9]\{1,3\}$' test.txt | grep '^[1-9]'

如果是變數

echo $var | grep '^[0-9]\{1,3\}$' | grep '^[1-9]'

$表示行尾

這個正則不匹配 12a 這樣的字元串

你的變數內容是什麼樣的?

我用來測試的 test.txt 的內容:
123
321
123212
001
010
100
10000
0011
10101
1101
1
2
3
11
22
33
1a
2a

Ⅷ 正則表達式和shell腳本的關系

簡而言之:
shell腳本中往往涉及大量字元串處理工作,而正則表達式就是為了幫助分析字元串格式是否匹配你的要求;正則替換可以實現替換字元串中符合正則要求的部分,使用起來非常靈活。
可以說,掌握了正則表達式,你的shell腳本水平就上了一個台階。

Ⅸ 在linux的shell語言中,怎樣用正則表達式來截取字元串

perl -le 'print $_ for split /\w=/, "a=1 b=2 c=3"'

Ⅹ shell編程怎麼抽取匹配正則表達式的字元串

a=$( expr 'helloworld20140501.txt' : '.*\([0-9]\{8\}\).*' )
echo $a
linux shell 中可以將命令的結果賦值給變數,$(命令)這種格式將返回命令執行後的結果字元串
上面命令執行後,變數a的值是20140501
a=`echo 'helloworld20140501.txt'|sed 's/.*\([0-9]\{8\}\).*/\1/'`
這個命令作用也是一樣,變數a被賦值為20140501

熱點內容
如何修改自己的名字和密碼 發布:2025-03-17 09:32:20 瀏覽:786
寶馬3系槍灰色輪轂是哪個配置 發布:2025-03-17 09:28:17 瀏覽:512
鴻蒙系統退回安卓系統怎麼備份 發布:2025-03-17 09:14:33 瀏覽:613
資料庫服務公司 發布:2025-03-17 08:56:43 瀏覽:495
我的世界伺服器載入不了區塊 發布:2025-03-17 08:56:39 瀏覽:817
如何給無線路由器設置密碼 發布:2025-03-17 08:51:40 瀏覽:886
SQL閥 發布:2025-03-17 08:45:23 瀏覽:162
ipadpro第一代什麼配置 發布:2025-03-17 08:44:38 瀏覽:198
linuxjava進程查看 發布:2025-03-17 08:29:19 瀏覽:969
安卓9系統安裝包哪裡下載 發布:2025-03-17 08:20:40 瀏覽:512