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.