1. 程式人生 > >linux sh指令碼使用正則獲取行中子字串

linux sh指令碼使用正則獲取行中子字串

[email protected]:/var/www/edm/ssh# vi assay.sh
#!/bin/bash

# get args[1]
logStr=$1

# get sender

# the exrep must have (),and all must escape

# 在sh中,:並不是"特殊字元",無需轉義,但是+號好像是,必須要轉義才能用,有點鬱悶,\w之類的不能使用.

sender=`expr "$logStr" : '.*:\([a-zA-Z0-9_\.]\+\)@[a-zA-Z0-9_\.]\+>'`
echo $sender

# remember exit
exit 0



=======================這是sh程式碼========

expr match "$string" '\($substring\)'從$string的開頭位置提取$substring*expr "$string" : '\($substring\)'從$string的開頭位置提取$substring*expr match "$string" '.*\($substring\)'從$string的結尾提取$substring*expr "$string" : '.*\($substring\)'從$string的結尾提取$substring*

在上表中.

expr "$string" : '\($substring\)'

這個表示式,對於一定要轉義()我不是很明白

但是我嘗試發現這個表示式的理解應該是

從字串的第一個字匹配開始,首先全域性匹配成功後才會有子匹配.並不是像js樣那樣理解,它會從任何位置開始匹配,它必須從首個字元匹配.

所以,你為了讓子匹配成功,必須寫好整個匹配

它有點像javascript的

^(.+)

它就相當於sh的

'\(.\+)\'

這樣就是從0字匹配.至於為什麼sh要轉義\+我有點搞不明白為什麼,我測試是ubuntu linux

如果你想從任何位置匹配

javascript的

^.*(.+)

相當

'.*(.+)

sh的,也就是所謂的從後面匹配,其實它只是讓前面的東西先匹配掉,子匹配就可以從任何地方開始.

==========看sh執行結果===========

[email protected]:/var/www/edm/ssh# ./assay.sh "...kdkjfjk:[email protected]>"

輸出結果如下
ekkjeifj

其實我意思是得到行中的郵箱地址的名字部分.

非常麻煩.首次使用.都搞不明白怎麼回事.

=============另一次輸入引數執行的結果=========

[email protected]:/var/www/edm/ssh# ./assay.sh "Dec 20 11:00:03  17
E8B100088:[email protected]>[email protected], relay=mx1.mail.cnb.yahoo.com[203.209.228.250]:25, delay=1.8, delays=0.11/0.05/1.2/0.44, dsn=2.0.0, status=sent (250 ok dirdel)" 

輸出如下
service.hr.qi_16

相關推薦

linux sh指令碼使用獲取中子字串

[email protected]:/var/www/edm/ssh# vi assay.sh#!/bin/bash# get args[1]logStr=$1# get sender# the exrep must have (),and all must escape# 在sh中,:並不是"特

Linux運維表達式之awk

sed pro inux運維 結構 inux 更改 部分 ram root 一:Linux運維正則表達式之sed AWK是一個優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一。 1.選項|參數: -F fs or --field-separa

Linux之基本表達式(grep)

grep 基本正則表達式 **正則表達式:Regual Expression,簡寫REGEXP**由一類特殊字符及文本字符編寫的模式,其中有些字符不表示其字面意義,而是用於表示控制或通配的功能:分兩類: 基本正則表達式:BRE 擴展正則表達式:ERE

jmeter手寫腳本,使用獲取cookie(禁用cookies管理器)

coo inf 手動 全局 其他 去掉 bugfree 因此 頭信息 註:這裏以bugfree為例 1.bugfree登錄時會有重定向,這會導致每個URL都會有。因此要手動獲取cookie的時候,需要去掉重定向勾選 正則獲取動態PHPsession 獲取到值後,放到信

php、linux、javascript 表達式

php linux javascript 正則 PHP 正則表達式中包含三種元素分別為:量詞、元字符、修飾符量詞 語法 描述 匹配任何至少包含一個前導字符串 匹配任何包含零個或多個前導字符串? 匹配任何

Linux中的表達式

處理 alt linux中 res 則表達式 title bubuko expr 支持 正則表達式的分類 基本的正則表達式(Basic Regular Expression 又叫Basic RegEx 簡稱BREs) 擴展的正則表達式(Extended Re

jmeter 獲取多個返回token至本地文件,並跨線程組調用

mage 表達 processor csv文件 參數 res 例如 通過 mark 1、打開jmeter,創建setup Thread Group對於setup Thread Group和tearDown Thread Group來說,從字面意思上來看就是安裝線程組和卸載線

js獲取富文字中的第一張圖片url公式及去除字串裡面的html標籤的公式

js獲取富文字中的第一張圖片url正則公式及去除字串裡面的html標籤 後臺發來一個富文字字串裡面可能包含了0、1、2、3…個圖片標籤(img),我們的任務是獲取這個字串裡面第一張圖片的url,如果沒有圖片則返回空 var imgUrlFun = function(str){

python3 利用獲取網頁中的想儲存下來的內容

需要獲取某個網頁中表格部分中某個產品的成份 分析在html中成份的元素程式碼 <a href="/composition/4c3060178d1184935a48c4e51be4f63f.html">水</a> 用正則匹配,由於 4c3060178d118

python 符問題 不支援(.*?)

有些換行符帶著 (.*?)匹配不到 就和很蛋疼 後來認識了\s 和\S 是完全通配的意思,\s是指空白,包括空格、換行、tab縮排等所有的空白,而\S剛好相反 這樣一正一反下來,就表示所有的字元,完全的,一字不漏的。 故而可以替換 p1 = r'(?<=<div cl

Linux下POSIX表示式API使用

一、概述 在Linux環境中,經常使用正則表示式,如grep、sed、find等等,目前正則表示式有2中不同的標準,分別是Perl標準和POSIX標準,這2種風格,大體相同,稍有差別。在 C/C++的標準庫均不支援表示式,不過在C++11標準中,貌似引入了boost的正則庫,在Li

linux-grep和

grep 選項 效果 -i 忽略大小寫 --color--colour 重點顯示搜尋字元 -v 反向過濾顯示

Linux命令- grep +表示式

一、簡介: grep (global search regular expression(RE) and print out the line,全面搜尋正則表示式並把行打印出來)是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。Unix的grep家族包括grep、egr

ios 用獲取需要的內容出現閃退(異常捕捉 try...catch...finally使用。)

1.用正則表示式取出需要的字串( @".\$([A-Za-z0-9]{13})\$.||.\#([A-Za-z0-9]{13})\#.||.\([A-Za-z0-9]{13})\.||.\%([A-Za-z0-9]{13})\%.||.\€([A-Za-z0-9]{13})\€." )

PHP- 獲取該類字串小括號內字元

$str = 'kk({"code":0,"msg":"操作成功","data":[{"name":Dave,"age":"25"}]})'; $rule='/(?:\()(.*)(?:\))/i'; preg_march_all($rule,$str,$res); var_dump($

Linux grep 命令匹配IP地址

1,以nginx的access.log日誌為例grep -o "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}" /var/log/nginx/access.log egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" /var/log/ngin

獲取檔名,'E:/**/lib/viser-vue/index.js'

'E:/**/lib/viser-vue/index.js' 使用後行斷言匹配 E:/**/lib/viser-vue/,然後進行變數名稱校驗 1、 const filePath = 'E:/**/lib/viser-vue/index.js'; conso

javascript通過獲取url問號後的引數

函式: function request(attribute){     var reg = new RegExp("(^|&)"+attribute+"=([^&]*)(&|$)");     var r = window.location.sea

獲取img的src和其他屬性

var reg = /<img src="(.*?)" dataUrl="(.*?)">/ig; var needHtml = html.replace(reg, '$2')div編輯器上傳圖片:<!DOCTYPE html PUBLIC "-//W3C//

linux下練習表示式

1.什麼是正則表示式 在做文書處理或編寫程式時,用到查詢、替換等功能,使用正則表示式能夠簡單快捷的完成目標。簡單而言,正則表示式通過一些特殊符號的幫助,使使用者可以輕鬆快捷的完成查詢、刪除、替換等處