Outro sed :
sed -ne's/^:\([[:upper:]]*\).* $//p' <in >out
Este comando tenta fazer uma s/// ubstitution por linha de entrada. A menos que seja bem-sucedida, -n othing é p rinted para saída. Portanto, o /regexp/ deve corresponder a uma linha e a s/// ubstitution deve ocorrer antes de sed %% dop rint, porque seu único comando p rint é um sinalizador na declaração s/// ubstitution.
Para corresponder a uma linha de entrada, primeiro é preciso coincidir com : dois pontos na ^ cabeça da linha, seguido imediatamente por * zero ou mais caracteres alfabéticos de[[:upper:]], seguido de * zero ou mais de qualquer outro tipo de caractere . , que deve ser seguido por pelo menos um espaço na linha $ da linha.
Quando ele corresponder à sequência de [[:upper:]] -chars que são referenciados no \( sub group \) é usado para substituir a linha inteira como salva em .
Mas isso não funciona para sua entrada de exemplo porque seu exemplo começa com um espaço e termina sem um. Um regexp que funcionará para o seu exemplo:
sed -ne's/^ *:\([[:upper:]]*\).*//p'
O que é basicamente o mesmo, mas em vez de procurar um espaço definido na cauda da linha, ele procura por qualquer número de espaços na cabeça.
INPUT
FORWARD
OUTPUT