shell字串的擷取

2022-11-25 19:21:04 字數 4061 閱讀 4618

shell字串的擷取的問題:

一、linux shell 擷取字元變數的前8位,有方法如下:

substr 「$a」 1 8

$a|awk 『』

$a|cut -c1-8

$a$a|dd bs=1 count=8 2>/dev/null

二、按指定的字串擷取

1、第一種方法: $ 從左向右擷取最後乙個string後的字串 $從左向右擷取第乙個string後的字串 $從右向左擷取最後乙個string後的字串 $從右向左擷取第乙個string後的字串 「*」只是乙個萬用字元可以不要

例子: $ myvar= $ echo $ $ echo $

2、第二種方法:$:擷取變數varible從n1到n2之間的字串。

可以根據特定字元偏移和長度,使用另一種形式的變數擴充套件,來選擇特定子字串。試著在 bash 中輸入以下行: $ exclaim=cowabunga $ echo $ cow $ echo $ abunga

這種形式的字串截斷非常簡便,只需用冒號分開來指定起始字元和子字串長度。

三、按照指定要求分割: 比如獲取字尾名 ls -al | cut -d 「.」 -f2

一、構造字串

直接構造 str_zero=hello str_first="i am a string" str_second='success'

重複多次 #repeat the first parm($1) by $2 times strrepeat()

舉例: str_repeat=`strrepeat "$user_name" 3` echo "repeat = $str_repeat"

二、賦值與拷貝

直接賦值與構造字串一樣 user_name=terry

從變數賦值 aliase_name=$user_name

三、聯接

直接聯接兩個字串 str_temp=`printf "%s%s" "$str_zero" "$user_name"` 使用printf可以進行更複雜的聯接

四、求長

求字元數(char) count_char=`echo "$str_first" | wc -m` echo $count_char

求位元組數(byte) count_byte=`echo "$str_first" | wc -c` echo $count_byte

求字數(word) count_word=`echo "$str_first" | wc -w` echo $count_word

五、比較

相等比較 str1 = str2

不等比較 str1 != str2

舉例: if [ "$user_name" = "terry" ]; then echo "i am terry" fi

小於比較 #return 0 if the two string is equal, return 1 if $1 < $2, else 2strcompare()

六、測試

判空 -z str

判非空 -n str

是否為數字 # return 0 if the string is num, otherwise 1 strisnum()

舉例: if [ -n "$user_name" ]; then echo "my name is not empty" fi

echo `strisnum "9980"`

七、分割

以符號+為準,將字元分割為左右兩部分使用sed 舉例: 命令 date --rfc-3339 seconds 的輸出為 2007-04-14 15:09:

47+08:00 取其+左邊的部分 date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g' 輸出為 2007-04-14 15:

09:47 取+右邊的部分 date --rfc-3339 seconds | sed 's/.*+//g' 輸出為 08:

00以空格為分割符的字串分割使用awk 舉例: str_fruit="banana 0.89 100" 取第3欄位 echo $str_fruit | awk ''

八、子字串

字串1是否為字串2的子字串 # return 0 is $1 is substring of $2, otherwise 1 strissubstring()

在做shell批處理程式時候,經常會涉及到字串相關操作。有很多命令語句,如:awk,sed都可以做字串各種操作。

其實shell內建一系列操作符號,可以達到類似效果,大家知道,使用內部操作符會省略啟動外部程式等時間,因此速度會非常的快。

一、判斷讀取字串值

加入了「*」 不是意思是: 當然, 如果變數var已經被設定的話, 那麼其值就是$var.

[chengmo@localhost ~]$ echo $ ok [chengmo@localhost ~]$ echo $abc

[chengmo@localhost ~]$ echo $ ok [chengmo@localhost ~]$ echo $abc ok

如果abc 沒有宣告「=" 還會給abc賦值。

[chengmo@localhost ~]$ var1=11;var2=12;var3= [chengmo@localhost ~]$ echo $ var1 var2 var3 [chengmo@localhost ~]$ echo $ var1 var2 var3

$與$相似,可以通過變數名字首字元,搜尋已經定義的變數,無論是否為空值。

二、字串操作(長度,讀取,替換)

說明:"* $substring」可以是乙個正規表示式.

1.長度

[web97@salewell97 ~]$ test='i love china' [web97@salewell97 ~]$ echo $ 12

$得到字串長度

2.擷取字串

[chengmo@localhost ~]$ test='i love china' [chengmo@localhost ~]$ echo $ e china [chengmo@localhost ~]$ echo $ e china

$得到子字串

3.字串刪除

[chengmo@localhost ~]$ test='c:/windows/' [chengmo@localhost ~]$ echo $ c:/windows/ [chengmo@localhost ~]$ echo $ windows/ [chengmo@localhost ~]$ echo $

[chengmo@localhost ~]$ echo $ c:/windows [chengmo@localhost ~]$ echo $

$從字串開頭開始配備substring,刪除匹配上的表示式。

$從字串結尾開始配備substring,刪除匹配上的表示式。

注意:$,$ 分別是得到檔名,或者目錄位址最簡單方法。

4.字串替換

[chengmo@localhost ~]$ test='c:/windows/' [chengmo@localhost ~]$ echo $ c:\windows/ [chengmo@localhost ~]$ echo $ c:

\windows\

$ 乙個「/」表示替換第乙個,」//」表示替換所有,當查詢**現了:」/」**轉義符」\/」表示。

三、效能比較

在shell中,通過awk,sed,expr 等都可以實現,字串上述操作。下面我們進行效能比較。

[chengmo@localhost ~]$ test='c:/windows/'

[chengmo@localhost ~]$ time for i in $(seq 10000);do a=$;done;

real 0m0.173s user 0m0.139s sys 0m0.004s

[chengmo@localhost ~]$ time for i in $(seq 10000);do a=$(expr length $test);done;

real 0m9.734s user 0m1.628s

速度相差上百倍,呼叫外部命令處理,與內建操作符效能相差非常大。在shell程式設計中,盡量用內建操作符或者函式完成。使用awk,sed類似會出現這樣結果。

字串的處理

一 查詢 1 比較兩個字串大小 int comparison char a,char b 3 在主串中查詢乙個字元 二 替換 1 只替換第一次出現的乙個 2 要全部替換 三 複製 1 乙個串全部複製到另乙個空串中 2 乙個串中的一部分字元 子串 複製到另乙個空串中 3 把乙個串中的一部分字元 子串 ...

js字串方法

關鍵字 js字串方法 js js自帶函式 concat 將兩個或多個字元的文字組合起來,返回乙個新的字串。vara hello varb world varc alert c c hello,world indexof 返回字串中乙個子串第一處出現的索引 從左到右搜尋 如果沒有匹配項,返回 1。va...

js字串方法

關鍵字 js字串方法 js js自帶函式 concat 將兩個或多個字元的文字組合起來,返回乙個新的字串。vara hello varb world varc alert c c hello,world indexof 返回字串中乙個子串第一處出現的索引 從左到右搜尋 如果沒有匹配項,返回 1。va...