Depois de corrigir os erros básicos da sintaxe, você tem:
sed "s/\(^[a-z,0-9]*\)\(.*\)\([a-z,0-9]*$\)//g"
-
s/old/new/
replaceold
comnew
-
\(^[a-z,0-9]*\)
salva qualquer número de letras minúsculas ou números no início da linha (^
é o início da linha) para mais tarde (referência posterior com)
-
\(.*\)
Salva qualquer número de caracteres para mais tarde (para referência como)
-
\([a-z,0-9]*$\)
salva qualquer número de letras minúsculas ou números no final da linha ($
é o fim da linha) para mais tarde (referência como)
-
imprime o primeiro padrão, depois o segundo, depois o primeiro novamente
-
g
isto é inapropriado nesta expressão. Isso significa atuar em várias correspondências na mesma linha, mas nossa expressão precisa ler a linha inteira, portanto,g
não faz sentido e deve ser omitido.
Isso ainda não funcionará, porque expressões regulares são gananciosas, então o meio \(.*\)
corresponde a tudo depois da primeira palavra, resultando na reimpressão da primeira palavra no final da linha sem substituir nada.
Você pode corrigi-lo (adicionando também I
para pesquisa sem distinção entre maiúsculas e minúsculas):
sed "s/\(^[a-z,0-9]*\) \(.*\) \([a-z,0-9]*$\)/ /I"
Se você quiser incluir outros caracteres além de letras e números:
sed -r 's/^([^ ]+) (.*) ([^ ]+)$/ /'
-
-r
usa ERE (salva usando todas as barras invertidas) -
[^ ]+
pelo menos um dos caracteres exceto espaços