前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell 字符串出现的行数

shell 字符串出现的行数

作者头像
阳光岛主
发布2019-02-19 14:57:21
1.1K0
发布2019-02-19 14:57:21
举报
文章被收录于专栏:米扑专栏米扑专栏

1 查询字符串所在的行号

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”在后,两者之间用冒号 “:” 隔开

2 查找字符串首次匹配的行号

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

3 提取字符串所在的行号

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

4 比较两次字符串行号变化幅度

两个文件内容: str.txt 和 str2.txt

str.txt

xxx yyy zzz xxx

str2.txt

yyy xxx www zzz

比较行号脚本

catline.sh

代码语言:javascript
复制
#!/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.sh    str2.txt   str.txt

运行结果如下:

代码语言:javascript
复制
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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年01月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档