1. 程式人生 > >Shell指令碼中提取字串

Shell指令碼中提取字串

在shell指令碼中,提取中括號'[]'之間的字串:

#!/bin/sh

STRING="hello,[sunny]! "

#extract substring 'sunny'
echo $STRING
SUBSTR=`expr "$STRING" : '.*\[\(.*\)\]'`
echo $SUBSTR
SUBSTR=$(expr "$STRING" : '.*\[\(.*\)\]')
echo $SUBSTR

SUBSTR=`echo "$STRING" | sed -n 's/.*\[\(.*\)\].*/\1/p'`
echo $SUBSTR


1)使用expr

SUBSTR=`expr "$STRING" : '.*\[\(.*\)\]'`
SUBSTR=$(expr "$STRING" : '.*\[\(.*\)\]')

解釋:expr會提取小括號'()'中匹配到的字串。注意,小括號和中括號字元都要轉義。這兩行指令碼的效果是一樣的。

2)使用sed(巧妙運用sed的替換功能)

SUBSTR=`echo "$STRING" | sed -n 's/.*\[\(.*\)\].*/\1/p'`
解釋:

指令碼最後的\p,是輸出sed處理後的行;

\,  轉義,理解正則表示式時,可以暫時將\剔除;

-n,限定/p只輸出匹配成功的行;

/1,代表小括號'()'中匹配到的字串;

s//,替換。關鍵的地方就在這裡。

1) s/.*\[\(.*\)\].*/\1 的意思就是先通過正則表示式.*\[\(.*\)\].*對字串$STRING進行匹配;

2) 如果匹配成功,會將\(.*\)匹配到的內容儲存到/1變數;

3) 使用/1變數中的內容,替換正則表示式.*\[\(.*\)\].*匹配到的字串。

可以看出正則表示式.*\[\(.*\)\].*匹配的是含有[]整個字串,而(.*)提取[]之間的字串並存儲到了/1中,然後使用/1的內容替換整個匹配到的字串,所以最後,實際輸出的就是\1中字串了。也就是\(.*\)中匹配到的內容。

相關推薦

Shell指令碼提取字串

在shell指令碼中,提取中括號'[]'之間的字串: #!/bin/sh STRING="hello,[sunny]! " #extract substring 'sunny' echo $STRING SUBSTR=`expr "$STRING" : '.*\[\

學習Linux shell指令碼連線字串的方法

這篇文章主要介紹了Linux shell指令碼中連線字串的方法,如果想要在變數後面新增一個字元,可以用一下方法: 程式碼如下: $value1=home $value2=${value1}"=" echo $value2 把要新增的字串變數新增{},並且需要把$放到外面。 這樣輸出的結果

Shell指令碼計算字串長度的幾種方法

1:wc -L wc -l (小寫)是獲取當前字串內容的行數,wc -L (大寫)可以獲取到當前行的長度,因此對於單獨行的字串可以用這個簡單的方法獲取。 $ str="123.?+ abc" $ echo "$str" |wc -L 10 2: expr lengt

Shell指令碼替換字串等操作

一、判斷讀取字串值 表示式 含義 ${var} 變數var的值, 與$var相同 ${var-DEFAULT} 如果var沒有被宣告, 那麼就以$DEFAULT作為其值 * ${var:-DEFAULT} 如果var沒有被宣告, 或者其

[Linux]如何在Shell指令碼計算字串長度?

有時在Linux作業系統中需要計算某個字串的長度,通過查詢資料整理了下目前Shell中獲取字串的長度的多種方法,在這裡分享給大家,方法如下: 方法1: 使用wc -L命令 wc -L可以獲取到當前行的長度,因此對於單獨行的字串可以用這個簡單的方法獲取,另外wc -l則是獲取當前字串內容的行數。 [c

shell指令碼字串比較和數字比較和檔案測試

(1) 字串比較: 作用:測試字串是否相等,長度是否為零,字串是否為NULL。 常用的字串比較符號如下。 =:比較兩個字串是否相同,相同則為“是”。 !=:比較兩個字串是否相同,不同則為“是”。 -n:比較字串的長度是否大於0,如果大於0則為“是”。 -z:比較字串的長度是否等於

shell正則提取字串的數字並儲存到變數

1.提取數字到變數 temp = `echo "helloworld20181212 | tr -cd "[0-9]""` echo ${temp} 2.釋義tr -cd "[0-9]"     tr是translate的縮寫,主要用於刪除檔案中的控制字元,或者進行字元轉換 &n

shell指令碼字串常用操作整理

shell中常用字串操作整理 shell指令碼中常用字串操作如下: 1. 字串的比較 2. 字串的長度 3. 擷取字串 4. 字串的替換 下面分別講解這些操作的用法。 1. 字串的比較 1.1. 等於和不等於 user=zabbix # 這是最常用的 if [

shell正則提取字串的數字並儲存到變數

1.提取數字到變數 temp=`echo  "helloworld20180719" | tr -cd "[0-9]" ` echo $temp 輸出 20180719 2.重定向到檔案 echo  "helloworld20180719" | tr -cd "[0

shell 指令碼求一個字串的長度

shell 中沒有可以直接求 某個字串變數的長度,有時候 想判斷 這個字串的長度,該如何是好呢, 我們都知道  -n  -z  分別是 字串不為空, 和字串 為空。 有時候想知道,字串的長度 ,卻沒有一個好的辦法。  有一個辦法,可以用 awk  在awk 中有一個函式,

shell指令碼的for迴圈和while迴圈

基礎for迴圈有三種:         ①直接寫-------例如:for  i   in  1,2,3,4(注:i 是變數; in是在什麼地方;do和done之間是迴圈體)         &n

Shell 指令碼8種字串擷取

Linux 的字串擷取很有用。有八種方法。 假設有變數 var=http://www.aaa.com/123.htm. 1. # 號擷取,刪除左邊字元,保留右邊字元。  程式碼如下:     echo ${var#*//} 其中 var 是

shell指令碼$的用處

1.$0 獲取當前執行的shell指令碼的檔名,包括路徑。[[email protected] ~]# vi test.sh[[email protected] ~]# cat test.shecho $0[[email protected] ~]# sh test.shtest

shell指令碼關於getopts的使用方法

例子: while getopts ":e:s:pd:l" arg; do   case $arg in   e)        ghs_env=$OPTARG       ;;   s)  

Shell 指令碼的檔名匹配和命令執行

理解下 shell 指令碼中的檔名匹配和命令執行的順序與結果。我們學習這個的目的是可以熟悉的在 shell 指令碼中寫出快速的找到檔案的命令。它可以匹配檔名中的任何字串,匹配檔名中的單個字元以及匹配檔名中的字母或數字符號。         首先我們來看看匹配檔案的符號

Shell 指令碼執行mysql語句

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux/Unix shell 指令碼呼叫SQL RMAN指令碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

shell指令碼的函式與子shell

shell指令碼中的函式與子shell 原文https://www.jianshu.com/p/7db79d7997b5 函式 函式的使用 bash中也有函式。一個函式就是一個子程式,是用於實現一串操作的程式碼塊。bash中的函式的形式如下: functi

Shell指令碼併發執行緒以及併發數的控制

http://blog.chinaunix.net/uid-8478094-id-3995108.html Shell指令碼中併發執行緒以及併發數的控制 主要記錄一下Shell指令碼中的命令的併發和序列執行。 預設的情況下,Shell指令碼中的命令是序列執行的,必須等到前一條命令

shell指令碼向hive動態分割槽插入資料

  set hive.exec.dynamic.partition=true;                     #開啟動態分割槽,預設是falseset hive.exec.dyn