首先,需要一个有效的正则表达式。如果我正确理解您的要求,这将起作用:
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 lineNumbers