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