请选择 进入手机版 | 继续访问电脑版

登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 3390|回复: 5

linux查找字符串所在行,输出行号

[复制链接]

14

主题

27

帖子

325

积分

中级会员

Rank: 3Rank: 3

积分
325
发表于 2020-1-27 00:01:21 | 显示全部楼层 |阅读模式
查找某个字符串所在行,可以用grep或awk来解决。
二者最大区别是,grep的结果是输出匹配内容的同时输出其所在行号;
awk可以仅输出行号,不输出匹配内容。
按需选择。
【模糊匹配 】输出行号


  • grep
  1. # 输出内容同时输出行号grep -n "要匹配的字符串" 文件名
复制代码

  • awk
  1. # 输出行号,并不输出内容# 注意是单引号awk '/要匹配字符串/{print NR}' 文件名
复制代码
【精确匹配(全匹配)】输出行号


  • grep
  1. grep -wn "要匹配的字符串" 文件名
复制代码
其中 grep -w 是完全匹配要匹配的字符串,字符串只是字段内一部分也可以匹配。比如,
  1. # 结果为abcd, abcde, abc等grep "abc" # 结果为abcgrep -w "abc"
复制代码

  • awk
awk并不能像grep那样去过滤单词。grep可以过滤到单词,awk只能过滤到字段。
  1. # 匹配以逗号为分隔(如csv)的第三列/第三个字段,打印行号awk -F, '$3=="要匹配的字符串" {print NR}' 文件名# 匹配以逗号为分隔(如csv)的第三列/第三个字段# 打印该行内容 写{print}或{print $0} 都可以awk -F, '$3=="要匹配的字符串" {print}' 文件名
复制代码
如果非要过滤到单词,可以根据单词的格式不同,利用正则表达式来灵活具体得精确匹配。
上面的语法awk "/要匹配字符串/{print NR}" 文件名 中/要匹配字符串/斜线里面的就是正则表达式的部分。
例如文件中单词是两侧空白的格式,比如 a aa aaa ,就用空格来表示单词旁边的空白,这样就能匹配到 a,而不会匹配到 aa 了。
再例如文件中单词是用双引号来分隔的,“a”“aa”“aaa” ,就可以再查找时加上双引号""来匹配了。
就是具体得搜索,也算是个办法吧。如果遇到了,还是更推荐使用grep -w。
  1. # 具体例子# 单词以空格分隔的时候,可以加上空格来搜索单词awk '/ aa /{print NR}' 文件名# 单词以双引号分隔的时候,可以加上引号来搜索单词# (以单引号分隔的单词这个方法行不通)awk '/"aa"/{print NR}' 文件名
复制代码
但注意这个方法可能会漏掉很多目标,比如"a c aa a a",第一个和最后一个a就会漏掉,只能找到倒数第二个a。所以重复一下,非要过滤到比字段更小的单词程度,更推荐使用grep -w。
用grep,只输出行号,不输出内容

上面说了用grep,是输出内容同时输出行号。
如果只想要行号,不想要内容,一般来说,用awk就足够了。
不知道有没有应用场景,假设想要匹配字段里的某个单词,同时又只要输出行号呢。
下面是想到的一种做法。
例如,在test.txt找word这个字符串,只输出行号
  1. $ cat test.txt word words,ok oksok,ok,words wordwords,wordwordpicture pictures,word words# 用grep匹配到单词,做一个中间文件,利用awk来只输出行号$ grep -wn "word" test.txt > test_with_no.txt |awk -F: '{print $1}' test_with_no.txt 124
复制代码
继续看看匹配的内容
  1. # 查看一下grep的内容,是没有匹配第三行的$ grep -wn "word" test.txt1:word words,ok oks2:ok,ok,words word4:picture pictures,word words# awk 做不到搜索单词上的精确匹配$ awk '/word/{print $0}' test.txt word words,ok oksok,ok,words wordwords,wordwordpicture pictures,word words# awk 含有~ 这个写法也是模糊查询$ awk -F, '$2~"word" {print $0}' test.txt words,wordwordpicture pictures,word words# awk == 是字段匹配$ awk -F, '$2=="word" {print $0}' test.txt #(无结果)
复制代码
(以上)
                                                                                                                                       
                                                    
  • 点赞                        
  • 收藏                        
  • 分享                                                                                                                        
  •                                                         
                                      
    • 文章举报                           
                                                
                                                                        
                                            
                                                        Olivia_Vang                                                                发布了28 篇原创文章 · 获赞 2 · 访问量 2万+                                                                                            私信                                                            关注
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x




上一篇:Docker之配置DNS服务
下一篇:MapReduce计算框架知识总结(一)
回复

使用道具 举报

0

主题

12

帖子

262

积分

中级会员

Rank: 3Rank: 3

积分
262
发表于 2020-2-3 03:54:33 | 显示全部楼层
这东西我收了!谢谢楼主![www.12360.co]
回复

使用道具 举报

0

主题

28

帖子

598

积分

高级会员

Rank: 4

积分
598
发表于 2020-2-22 12:31:59 | 显示全部楼层
楼主发贴辛苦了,谢谢楼主分享![www.12360.co]
回复

使用道具 举报

0

主题

26

帖子

556

积分

高级会员

Rank: 4

积分
556
发表于 2020-3-17 00:41:10 | 显示全部楼层
我看不错噢 谢谢楼主![www.12360.co]
回复

使用道具 举报

0

主题

12

帖子

262

积分

中级会员

Rank: 3Rank: 3

积分
262
发表于 2020-3-18 23:48:29 | 显示全部楼层
楼主,大恩不言谢了![www.12360.co]
回复

使用道具 举报

11

主题

23

帖子

295

积分

中级会员

Rank: 3Rank: 3

积分
295
发表于 5 天前 | 显示全部楼层
其实我一直觉得楼主的品味不错!呵呵![www.12360.co]
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

动物之森

GMT+8, 2020-3-30 15:53 , Processed in 0.093226 second(s), 42 queries .

www.12360.co 集合吧!动物之森

Copyright © 2019-2020.

快速回复 返回顶部 返回列表