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

use*_*888 16 bash awk grep

我正在使用bash脚本进行测试.在我的测试中,我必须找到文件中第一次出现字符串的行号.我曾经尝试过"awk"和"grep",但是没有它们会返回值.

Awk的例子

#/!bin/bash
....
VAR=searchstring
...
cpLines=$(awk '/$VAR/{print NR}' $MYDIR/Configuration.xml
Run Code Online (Sandbox Code Playgroud)

这不会扩大$ VAR.如果我使用VAR的值它可以工作,但我想使用VAR

Grep的例子

#/!bin/bash
...
VAR=searchstring    
...
cpLines=grep -n -m 1 $VAR $MYDIR/Configuration.xml |cut -f1 -d: 
Run Code Online (Sandbox Code Playgroud)

这给出了错误行20:-n:command not found

ent*_*erx 13

grep -n -m 1 SEARCH_TERM FILE_PATH |sed  's/\([0-9]*\).*/\1/'
Run Code Online (Sandbox Code Playgroud)

grep开关

-n =包含行号

-m 1 =匹配一个

sed选项(流编辑器):

's/X/Y/' - 用Y代替X.

\([0-9]*\) - 正则表达式匹配数字零或多次发生,转义括号,与括号中的正则表达式匹配的字符串将是Y中的\ 1参数(替换字符串)

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


Rau*_*res 8

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

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


jay*_*ngh 5

尝试类似的东西:

awk -v search="$var" '$0~search{print NR; exit}' inputFile
Run Code Online (Sandbox Code Playgroud)

awk,/ /将从awk字面上解释变量.你需要使用match(~)运算符.我们在这里做的是根据您的输入行查找变量.如果匹配,我们打印存储的行号NR并退出.

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