Melhor com sed :
sed -n 's/^\[one]: //p' < example.txt
Com o GNU grep com suporte para PCRE recente, você também pode fazer:
grep -Po '^\[one]: \K.*' < example.txt
Ou
grep -xPo '\[one]: \K.*' < example.txt
Em qualquer caso, note que na maioria dos shells, [...] são operadores glob. Em grep [myword] , [myword] é expandido para a lista de arquivos que correspondem a isso, ou seja, qualquer arquivo no diretório atual cujo nome seja m , y , w , o , r ou d (e se não houver nenhum, dependendo do shell, o padrão é passado como é para grep ou você recebe um erro). Então eles devem ser citados para o shell (com aspas simples, por exemplo, como nas soluções aqui). Por exemplo, se houver um arquivo chamado r no diretório atual e um chamado d , grep [myword] se tornará grep d r em todos os shells, mas fish .
[...] é também um operador especial em expressões regulares (muito semelhante ao operador [...] glob), grep '[myword]' corresponderia às linhas que contêm m , y , w , o , r ou d . Então você precisa escapar também da abertura [ para grep (para expressões regulares). Isso pode ser feito com grep '\[myword]' ou grep '[[]myword]' .
^ é outro operador de expressão regular que significa: corresponde apenas no início da linha. Portanto, grep '^\[myword]: ' corresponde a linhas que começam com [myword]: .
Enquanto grep serve apenas para imprimir linhas de correspondência (não é um editor de fluxo como sed ), o GNU grep adicionou a opção não padrão -o para imprimir a porção correspondente (s ) da linha (se não estiver vazia). Ele também adicionou as opções -P para usar expressões regulares compatíveis com perl (em PCRE) em vez de básicas sem -P .
Em PCREs recentes, \K é um operador que redefine o início da parte correspondente. Portanto, em grep -Po '^\[one]: \K.*' , imprimimos a parte correspondente por causa de -o , mas devido a \K , essa parte correspondente torna-se a seqüência de caracteres ( .* ) encontrada depois de [one]: .