shell截取文件中的关键字
1.Linux shell 截取字符变量的前8位
实现方法有如下几种:
- expr substr “$a” 1 8
- echo $a|awk ‘{print substr(,1,8)}’
- echo $a|cut -c1-8
- echo $
- expr $a : ‘\(.\\).*’
- 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