本文举了一些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
执行脚本命令:
./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