![]() ![]() 一行寫下來,free.htm是源文件,只是用了一個臨時文件temp 供大家查考吧,是不是太簡單了 |
以上來自網絡,但是實在是沒什么用。
1.使用sed命令替換字符串中的指定字符,並顯示替換的行:
sed 可以使用shell變量,只需將單引號變為雙引號即可。
76 #Change every script's name 77 78 for i in $list ;do 79 len=${#i} 80 realfile=${i:`expr $len - 21`:21} 81 if [[ $realfile != "upgrade_partitions.sh" ]] ;then 82 if [[ $flag == "add" ]] ;then 83 newname=$(echo "$i" | sed -n "s/_${version}.sh/_`expr ${version} + 1`.sh/p") 84 else 85 newname=$(echo "$i" | sed -n "s/_${version}.sh/_`expr ${version} - 1`.sh/p") 86 fi 87 echo "newname:$newname" 88 mv $i $newname 89 fi 90 done
2.只用 '-i' 選項,sed可以使替換后的文件寫回到源文件,實現文件的覆蓋。
57 #Change the content of every script 58 for i in $list ;do 59 len=${#i} 60 realfile=${i:`expr $len - 21`:21} 61 if [[ $realfile != "upgrade_partitions.sh" ]] ;then 62 echo "The $i file need change!" 63 if [[ $flag == "add" ]];then 64 # scr_str=$(printf "%s%s%s" "_" $version ".sh") 65 # echo "$i : version:$scr_str" 66 sed -i "s/_${version}.sh/_`expr $version + 1`.sh/g" $i 67 else 68 sed -i "s/_${version}.sh/_`expr $version - 1`.sh/g" $i 69 fi 70 else 71 echo "The upgrade_partitions.sh no need change!" 72 fi 73 74 done
我們在編寫shell腳本的時候,經常會遇到在腳本中使用awk或sed去調用shell環境中的變量的時候,下面我簡單的說一下調用的方法。
sed一般使用單引號,sed引用shell變量時使用雙引號即可,因為雙引號是弱轉義,不會去除$的變量表示功能,而單引號為強轉義,會把$作為一般符號表示,所以不會表示為變量。
1 sed -e "s#user_defined_basedir#$mysql_base_dir#g" -e "s#user_defined_datadir#$mysql_data_dir#g" mysqld.sh -i
awk在調用shell變量時,需要使用參數-v,舉例說明:
1 awk -v a=$second -v b=$count '$2==a{sum += $1};END {print sum/b}' filename
其中$second、和$count為shell中變量,可以看出,每調用一次變量都要加一個-v參數,后面使用shell變量的時候,就不用加$了,直接是a和b就好了
------------------------------------------------------------------------------------------------------------------------
來自:http://blog.chinaunix.net/uid-7396950-id-2056484.html
最近做預料處理,使用bash腳本,需要在腳本的sed和awk使用shell變量以控制循環,出現一些問題后找到解決辦法如下:
1.sed使用shell變量
這個比較好辦,sed命令中可以用單引號和雙引號,一般我們習慣用單引號,如下:
1 sed -i 's/pattern1/pattern2/g' inputfile 2 #如果要使用shell變量,就需要使用雙引號 3 pattern1=XXX 4 pattern2=XXX 5 sed -i "s/$pattern1/$pattern2/g" inputfile
2. awk使用shell變量
1 有很多種方法,最簡單的一種記錄如下: 2 line=XXX 3 awk '$1== " '$line' " {print $0}' inputfile 4 注意的是,awk命令本身需要將模式和動作部分用單引號引用,所以里面引用shell變量是雙引號+單引號,雙引號是保證正確處理變量值的空格,放大一下: 5 " '$line' " 6 另外: 7 awk '$1="win"{$"'$curcls'"=$"'$curcls'"+1;print $0}' nwf 8 則是另一種間接引用模式,因為通常shell的間接引用是使用 9 eval echo \$$var 10 更高級的 11 a=10 12 b=a 13 c=${!b} 14 則c=10