shell截取文件中的关键字

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

posted @ 2017-11-12 17:56  小菜77  阅读(5658)  评论(0编辑  收藏  举报