我正在尝试使用pcregrep -M来搜索多行字符串。
下面是我的脚本中的这一行:
lineNumber=$(pcregrep -Mn '$firstLine.*\n.*$secondLine.*' $myFile)myFile包含表单的多行:
firstLine\n
secondLine(with other characters here that I don't need to match)我得到了lineNumber的空字符串,仅此而已。
我做错了什么?
返回值应该是什么?-n不应该给我行号吗?如果是,是哪一行,第一行还是第二行?
我应该使用awk还是sed,如果是这样,该如何使用呢?
发布于 2014-07-02 10:02:59
首先,需要一个有效的正则表达式。如果我正确理解了您的要求,这将会起作用:
pcregrep -Mn '^firstLine.*\n^secondLine' myFile请注意,此命令打印的不仅仅是行号。根据pcregrep手册页,它还打印匹配的行。
如果只想打印起始行号,请尝试:
sed -n '/^firstLine/=' myFile正则表达式/^firstLine/选择第一行,命令=告诉sed打印行号。
要仅打印结束行号,请执行以下操作:
sed -n '/^secondLine/=' myFile要获取两者之间的任何行,请执行以下操作:
sed -n '/^firstLine/,/^secondLine/=' myFile也可以使用awk。线路选择类似。打印行号的命令不同。例如:
awk '/^firstLine/ {print NR}' myFile将行号捕获到一个变量中
可以使用命令替换将行号捕获到变量中:
lineNumber=$(awk '/^firstLine/ {print NR}' myFile)但是,如果有两个或更多行号,这可能对您没有用处。在这种情况下,如果您使用支持数组的shell,例如bash,您可能更喜欢将行号捕获到一个数组中,如下所示:
lineNumbers=($(awk '/^firstLine/ {print NR}' myFile))如果您不熟悉数组,请注意,诸如echo $lineNumbers之类的语句不会显示整个数组,而只显示它的第一个元素。要查看整个数组,请运行:
declare -p lineNumbershttps://stackoverflow.com/questions/24520428
复制相似问题