Você pode fazer isso com ed
:
ed -s infile <<\IN 2>/dev/null
1s/PATTERN/&/
,p
q
IN
o truque aqui é tentar substituir a linha PATTERN
on 1st
por si mesma. ed
será eliminado se não puder encontrar o padrão especificado, portanto, ,p
(imprimir arquivo inteiro) será executado apenas se 1s/PATTERN/&/
for bem-sucedido.
Ou com sed
:
sed -n '1{
/PATTERN/!q
}
p' infile
este q
uits se a primeira linha não ( !
) corresponder a PATTERN
, caso contrário, p
solicitará todas as linhas.
Ou, como apontado por Toby Speight , com o GNU sed
:
sed '1{/PATTERN/!Q}' infile
Q
é o mesmo que q
, mas não imprime o espaço do padrão.