linux查找字符串所在行

Catalogue
  1. 1. 模糊匹配 输出行号
  2. 2. 精确匹配(全匹配)输出行号
  3. 3. 参考

模糊匹配 输出行号

  1. grep

    1
    2
    # 输出内容同时输出行号
    grep -n "要匹配的字符串" 文件名
  2. awk

1
2
3
# 输出行号,并不输出内容
# 注意是单引号
awk '/要匹配字符串/{print NR}' 文件名

这里涉及一个小的知识点,如何在awk中写变量呢。
比如“要匹配字符串”位置想要写入一个变量,要在变量外加单引号,再加双引号:

1
2
3
4
5
6
# 变量赋值
word=hello

# 在awk中引入变量, 打印变量所在的行
awk '/"'${word}'"/{print $0}' file.txt
# 其中${word}是变量较好的写法,$word 的写法也可以执行

精确匹配(全匹配)输出行号

  1. grep
1
grep -wn "要匹配的字符串" 文件名

其中 grep -w 是完全匹配要匹配的字符串,字符串只是字段内一部分也可以匹配。比如,

1
2
3
4
# 结果为abcd, abcde, abc等
grep "abc"
# 结果为abc
grep -w "abc"
  1. awk

awk并不能像grep那样去过滤单词。grep可以过滤到单词,awk只能过滤到字段。

1
2
3
4
5
6
# 匹配以逗号为分隔(如csv)的第三列/第三个字段,打印行号
awk -F, '$3=="要匹配的字符串" {print NR}' 文件名

# 匹配以逗号为分隔(如csv)的第三列/第三个字段
# 打印该行内容 写{print}或{print $0} 都可以
awk -F, '$3=="要匹配的字符串" {print}' 文件名

参考

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