当前位置: > shell编程 >

与字符串行数相关的shell操作

时间:2014-09-10 19:29来源:linux.it.net.cn 作者:it

本文举了一些shell中字符串相关的操作例子,包括查询字符串所在的行号、查找字符串首次匹配的行号、提取字符串所在的行号、比较两次字符串行号变化幅度等。

一、查询字符串所在的行号
grep  -n  "xxx"   str.txt   #  -n 打印字符 “xxx” 在文件 “str.txt” 所在的行数前缀

示例:
str.txt 
xxx
yyy
zzz
xxx

输入查找命令: grep  -n  "xxx"   str.txt 

结果如下: 
1:xxx
4:xxx

行号1,4在前,匹配字符串“xxx”在后,两者之间用冒号 “:” 隔开

二、查找字符串首次匹配的行号
grep  -n  "xxx"   str.txt  | head -1

结果如下:
1:xxx

同理,查找最后一次匹配的行号
grep  -n  "xxx"   str.txt  | tail -1

结果如下:
4:xxx

查找字符串第二次匹配的行号
grep  -n  "xxx"   str.txt  | head -2 | tail -1# 先取出前两行,然后取最后一行

结果如下:
4:xxx

三、提取字符串所在的行号
grep  -n  "xxx"   str.txt  | cut  -d  ":"  -f  1
先查询字符串 “xxx” 所在的全部行号,然后利用 cut 命令分割“:”字符,提取第一个字段,即行号

结果如下:
1
4

提取首次匹配的行号
grep  -n  "xxx"   str.txt  | head -1  | cut  -d  ":"  -f  1

结果如下:
1

四、比较两次字符串行号变化幅度
两个文件内容: str.txt 和 str2.txt

#----str.txt
xxx
yyy
zzz
xxx

#---str2.txt
yyy
xxx
www
zzz

比较行号脚本
catline.sh
 

复制代码代码如下:
#!/bin/bash  
  
rm -rf ret.txt  
  
total=`wc -l $1 | awk '{print $1}'`  
echo "total = $total"  
  
num=1  
while read line  
do  
  echo $line  
  
  ret=`grep -n $line $2 | head -1`  
  echo $ret  
  
  if [ -z $ret ]; then  
 num2=$total  
 echo "null num2 = $total"  
  else  
 num2=`echo $ret | cut -d ":" -f 1`  
 echo "num2 = $num2"  
  fi  
  
  echo $num  
  change=`expr $num2 - $num`  
  echo "$num2 - $num = $change"  
  
  num=`expr $num + 1`  
  
  echo "$line=$change" >> ret.txt  
done < $1  
  
cat ret.txt 

执行脚本命令:
./catline.shstr2.txt   str.txt

运行结果如下:
total = 4  
yyy  
2:yyy  
num2 = 2  
1  
2 - 1 = 1  
xxx  
1:xxx  
num2 = 1  
2  
1 - 2 = -1  
www  
  
null num2 = 4  
3  
4 - 3 = 1  
zzz  
3:zzz  
num2 = 3  
4  
3 - 4 = -1  
yyy=1  
xxx=-1  
www=1  
zzz=-1 

 
(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容