$ sed 's/.*]//' file.txt | tr -s ' '
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
O sed
remove tudo na linha até (e incluindo) o% final]
e o tr
compacta vários espaços consecutivos em espaços únicos.
Como alternativa, usando apenas sed
:
sed -e 's/.*]//' -e 's/ */ /g' file.txt
Com os dados de entrada fornecidos, isso produz a mesma saída que o primeiro pipeline.
Este sed
primeiro faz s/.*]//
, o que exclui tudo até o ]
(inclusive). A segunda expressão corresponde a ␣␣*
, ou seja, um espaço seguido por zero ou mais espaços e os substitui por um único espaço. A segunda expressão é aplicada em toda a linha e tem o mesmo efeito que tr -s ' '
, ou seja, comprime vários espaços consecutivos em espaços únicos.
Usando awk
:
awk -F '[][:blank:]]*' '{ print $3,$4 }' file.txt
Aqui, usamos ]
ou espaços ou tabulações como separadores de campo (múltiplos deles podem separar duas colunas, e é por isso que usamos *
após o [...]
). Dados esses separadores, os dados desejados estão disponíveis nos campos 3 e 4 em cada linha.
Após os dados da pergunta terem sido editados para remover alguns espaços entre as duas últimas colunas, o seguinte também fará o trabalho:
cut -d ']' -f 3 file.txt
alternativamente apenas
sed 's/.*]//' file.txt
ou
awk -F ']' '{ print $3 }' file.txt