在本文將主要講到在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命令
4.字符串替換
想把一個字符串中的某些字符串替換成自己想要的,可以採用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