Linux shell腳本編程總結(二、字符串操作)

 

在本文將主要講到在shell中如何操作字符串,包括:字符串的截取、拼接、提取、替換等操作

對於字符串截取,主要是#、##、%、%%下面通過代碼介紹介紹介個範例:

1.字符串截取

#!/bin/bash
string=www.baidu.com

#字符串截取
#字符串截取,%%表示從右邊開始,到符號“.”最後出現的地方把“.”號右邊的字符串去掉
tmp1=${string%%.*}
#輸出:tmp1=www

#字符串截取,%表示從右邊開始,到符號“.”第一次出現的地方把“.”號右邊的字符串去掉
tmp2=${string%.*}
#輸出:tmp2=www.baidu

#字符串截取,#.*表示從左邊開始,到符號“.”第一次出現的地方把“.”號左邊的字符串去掉
tmp3=${string#*.}
#輸出:tmp3=baidu.com

#字符串截取,##表示從左邊開始,到符號'.'最後出現的地方把“.”號左邊的字符串去掉
tmp4=${string##*.}
#輸出:tmp5=com

#指定位置截取,從字符串0位置開始,到3位置結束
tmp9=${string:0:3}
#輸出:tmp5=www

echo "tmp1=$tmp1 tmp2=$tmp2 tmp3=$tmp3 tmp4=$tmp4 tmp5=$tmp5"

關於#、##、%、%%的記憶技巧

#在鍵盤上$鍵的左邊,截取從左邊開始

%在鍵盤上$鍵的右邊,截取從右邊開始

關於*號,*號是通配符

如果是“%”或者“%%”則*號在“%”或者“%%”要截取字符串標誌位的中間,如%.*、 %%.*

公式:%c*、%%c*,c爲要截取字符串的標誌位

如果是“#”或者“##”則*號在要截取字符串標誌位的右邊,如#*.、 ##*.

公式:#*c、##*c,c爲要截取字符串的標誌位
指定位置截取

${string:起始位置:結束位置}

2.字符串拼接

#!/bin/bash
#字符串拼接
a="hello"
b="world"
test="${a} ${b}"
echo "test = $test"

3.字符串提取

這裏指的提取是從一個命令的執行結果提取想要的字符串,和直接從現有的字符串截取還是有點區別的。

從一個命令的執行結果提取想要的字符串,可以考慮採用awk命令

Linux awk命令詳解

4.字符串替換

想把一個字符串中的某些字符串替換成自己想要的,可以採用sed命令

Linux中sed的用法

使用awk命令和sed命令可以實現shell腳本修改配置文件

做個擴展,例如存在配置文件system.conf,配置文件內容如下

[version]
code=linux-1.1.0

 看一個簡單的例子程序:

#!/bin/sh

function get_config()
{
    SECTION=$1
    ITEM=$2
    awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$ITEM"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' system.conf
}

LINE=$(cat -n system.conf | grep 'version' |awk '{print $1}')    
#得到code所在的行號     
LINE=`expr $LINE + 1` 
#得到code的內容    
CODE=`get_config "version" "code"`
echo "LINE=$LINE CODE=$CODE"
#輸出:LINE=2 CODE=linux-1.1.0

NEW_VERSION="code=linux-1.2.0"
#將第二行的內容替換
sed -i "${LINE}c${NEW_VERSION}" system.conf 

NEW_CODE=`get_config "version" "code"`
echo "NEW_CODE=$NEW_CODE"
#輸出:NEW_CODE=linux-1.2.0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章