我正在使用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]*\).*
- .*
将匹配任何出现零次或多次的字符.
在grep中需要$()来进行变量替换
cpLines=$(grep -n -m 1 $VAR $MYDIR/Configuration.xml |cut -f1 -d: )
Run Code Online (Sandbox Code Playgroud)
尝试类似的东西:
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
).