As ferramentas Unix são mais frequentemente orientadas a linhas e, portanto, não há como aplicar uma expressão regular em várias linhas de entrada usando a caixa de ferramentas padrão.
sed pode ser feito para processar o arquivo de forma que ele consiga detectar as linhas que você está procurando, mas fazemos isso estritamente usando operações em linhas individuais:
$ sed -n '/^Text/{N;/^Text\nLine/=;D;}' file
10
Este script sed procura a string Text no início de uma linha. Quando encontrado, ele anexa a próxima linha ao seu buffer com um \n intermediário.
Se o buffer agora corresponder a ^Text\nLine , o número da linha atual será gerado usando o comando = em sed . O número da linha resultante é o da linha Line no arquivo.
Observe que, embora a segunda expressão regular pareça corresponder a uma nova linha no arquivo, isso não acontece. Ele corresponde a uma nova linha em seu buffer interno, que nós colocamos lá usando o comando N quando lemos a próxima linha do arquivo.
Você provavelmente usaria isso em um loop se quiser aplicá-lo em vários arquivos:
for name in pattern; do
printf 'Processing %s...\n' "$name"
sed -n '/^Text/{N;/^Text\nLine/=;D;}' "$name"
done
onde pattern seria um padrão de globbing de nome de arquivo comum que corresponde aos arquivos em que você está interessado.