如何从当前行号中找出以yyyy-mm-dd格式的日期开头的行号?在下面的示例中,我想找出以以下内容开头的行的行号2016-10-09 gggg从我当前的行号开始,编号为 10。从 10 到 N+1 之间的行没有特定的模式,并且这些行不会以日期开头。我当前的代码如下
lineNos=($(grep -n ERROR $file | cut -d':' -f1 | tail -3))
length=${#lineNos[@]}
for((i=0;i<length;i++));do
lineNumber=${lineNos[i]}`
endLineNo= Need to find this
sed -n "${lineNumber},${endLineNo}p" $file
done
例子
2016-10-04 mmm我们 10 2016-10-09 错误 dddd 11 ttttt 12 错误 ... 尼... N+1 2016-10-09 gggg N+2 2016-10-10 嗯
答案1
这是 awk 的经典任务,您可能不需要“first grep”:
cat myfile | awk '/pattern1/ {start=1} /pattern2/ {if (start) print NR}'
如果你确实想找到pattern2,但只从 LINE 行开始搜索,你可以这样做:
cat myfile | awk '/pattern2/ {if (NR>'$LINE') print NR}'
答案2
offset=$(grep -n 'pattern1' /path/to/input | cut -d: -f1)
awkcmd="/pattern2/ { \$1 = \$1 - $offset; print \$0 }"
cat -n /path/to/input | awk "$awkcmd"