sed '/^[[:upper:]][[:lower:]]\{1,\} symptom$/!d
H;x;/^\n/!q;s///;x;d'
Isso irá procurar por linhas que começam com um caractere maiúsculo seguido por um ou mais caracteres minúsculos, em seguida, apenas um < espaço > e a seqüência sintoma . Se a linha atual não corresponder, ela será d
eleted e o script iniciará novamente a partir do topo com a próxima linha de entrada.
Se ele corresponder , ele será copiado para H
old space após um delimitador de \n
ewline inserido. A primeira vez que isso acontecer, h
old space estará vazio - e, portanto, o caractere principal será um \n
ewline. Depois que a linha correspondente for H
eld, os espaços h
old e padrão serão e x
alterados. Se houver !
não uma entrelinha \n
no espaço padrão nesse momento, então sed
q
uits entrada - abruptamente deixando de ler mais alguma entrada (ou executar qualquer mais comandos em seu script - como d
) . Mas quando houver o primeiro \n
ewline é removido e h
old e espaços padrão são novamente e x
alterados e o espaço padrão é d
eleted.
O resultado é o primeiro em que a linha é encontrada e seu marcador de primeira ocorrência significa que ele foi salvo da entrada q
user, mas a hora em que ele ocorre termina o processamento.
Mas talvez eu tenha entendido errado? Eu entendi que você quer dizer que você queria apenas as duas primeiras partidas em um arquivo.
Se você quiser apenas o Nome se sintoma $ for fácil:
sed -n '/^[[:upper:]][[:lower:]]\{1,\} [^ ]*$/s/ symptom$//p'
Aqui, apenas verificamos que estamos analisando uma linha de correspondência provável antes mesmo de tentar uma s///
ubstitution - porque a s///
ubstitution é uma função do endereço pai. Se for verdade, tentamos cortar o caminho indesejado e apenas p
rint se for bem-sucedido - então as condições both head e tail of line são verificadas antes de nós.