1. 程式人生 > >shell截取文件中的關鍵字

shell截取文件中的關鍵字

str 取字符 ood jpg lai linux 截斷 fix 通配符

1.Linux shell 截取字符變量的前8位


實現方法有如下幾種:

  1. expr substr “$a” 1 8
  2. echo $a|awk ‘{print substr(,1,8)}’
  3. echo $a|cut -c1-8
  4. echo $
  5. expr $a : ‘\(.\\).*’
  6. echo $a|dd bs=1 count=8 2>/dev/null

2.按指定的字符串截取


(1)第一種方法:

從左向右截取最後一個string後的字符串
${varible##*string}
從左向右截取第一個string後的字符串
${varible#*string}
從右向左截取最後一個string後的字符串
${varible%%string*}
從右向左截取第一個string後的字符串
${varible%string*}
“*”只是一個通配符可以不要

請看下面的例子:

$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo}
rthought.jpg
$ echo ${MYVAR#*fo}
odforthought.jpg


(2)第二種方法:

${varible:n1:n2}:截取變量varible從n1開始的n2個字符,組成一個子字符串。可以根據特定字符偏移和長度,使用另一種形式的變量擴展,來選擇特定子字符串。試著在 bash 中輸入以下行:

$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga


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

3.按照指定要求分割:

3.1比如獲取後綴名ls的列表

cd $FROM_DIR

for i in `ls E2C_ALL_*|awk ‘{print $1}‘`
do

echo $i
s_filename=‘‘
echo "define param:$s_filename"

3.2 獲取行數據
cat $i | while read line
do
va_line=${line}
headfix=`expr substr "$va_line" 1 1`

if [ $headfix = "#" ];then

3.3截取關鍵字,號前的字段,二次截取#號後的字段
s_filename=` echo $va_line|awk -F ‘,‘ ‘{print $1}‘|awk -F ‘#‘ ‘{print $2}‘ `
content=` echo $va_line|awk -F ‘,‘ ‘{print $2}‘ `
echo "filename: $s_filename"
touch $TO_DIR$s_filename
echo $content >> $TO_DIR$s_filename
else
echo $va_line >> $TO_DIR$s_filename
fi
done

3.4 追加處理結束後做備份處理

mv ${i} ${BACK_DIR}${i}

done

shell截取文件中的關鍵字