使用 grep 获取文件中字符串首次出现的行号



我正在使用bash脚本进行测试。在我的测试过程中,我必须找到文件中第一次出现的字符串的行号。我已经尝试了"awk"和"grep",但没有一个返回值。

awk 示例

#/!bin/bash
....
VAR=searchstring
...
cpLines=$(awk '/$VAR/{print NR}' $MYDIR/Configuration.xml

这不会$VAR展开。如果我使用 VAR 的值,它可以工作,但我想使用 VAR

格雷普示例

#/!bin/bash
...
VAR=searchstring    
...
cpLines=grep -n -m 1 $VAR $MYDIR/Configuration.xml |cut -f1 -d: 

这给出了错误行 20:-n:找不到命令

grep -n -m 1 SEARCH_TERM FILE_PATH |sed  's/([0-9]*).*/1/'

格瑞普开关

-n = 包含行号

-m 1 = 匹配 1

SED 选项(流编辑器):

's/X/Y/' - 将 X 替换为 Y

([0-9]*) - 正则表达式

匹配零次或多次出现的数字,转义括号,括号中与正则表达式匹配的字符串将是 Y 中的 \1 参数(替换字符串)

([0-9]*).* - .*将匹配出现零次或多次的任何字符。

你需要 $() 在 grep 中进行变量替换

cpLines=$(grep -n -m 1 $VAR $MYDIR/Configuration.xml |cut -f1 -d: )

尝试如下操作:

awk -v search="$var" '$0~search{print NR; exit}' inputFile

awk中,/ /将按字面解释awk变量。您需要使用match~)运算符。我们在这里所做的是针对您的输入行查找变量。如果匹配,我们打印存储在NR中的行号并退出。

-v允许您在上面的示例中创建一个awk变量(search)。然后,将其分配给您的bash变量 ( $var )。

grep -n -m 1 SEARCH_TERM FILE_PATH | grep -Po '^[0-9]+'

解释:

 -Po = -P -o

-P 使用 perl 正则表达式

-o仅打印匹配的字符串(而不是整行)

尝试翘曲;

grep -P 'SEARCH TERM' fileName.txt | wc -l

相关内容

  • 没有找到相关文章

最新更新