Comando Bash para dividir uma linha de texto em 2 linhas

Comando Bash para dividir uma linha de texto em 2 linhas

Eu quero esta linha de um arquivo de texto

This is to become line 1 and that is line 2

Para ser dividido em 2 linhas, assim:

This is to become line 1
and that is line 2

Observe que não quero editar/cortar/remover nada, nem um único caractere, só quero terminar com 2 linhas de texto em vez de uma, e poder decidir onde a divisão deve ocorrer. Como posso usar sedou awkou splitpara fazer isso? Realmente não me importo com qual eu uso, mas eu preferiria sed, se possível ...

Responder1

Bem, isso funcionará se você estiver tentando dividir a linha na palavra "e".

echo "This is to become line 1 and that is line 2" | sed 's/and/\nand/g' 
This is to become line 1 
and that is line 2

Observe que sua milhagem pode variar dependendo da versão do sed que você está usando.

ATUALIZAR:

Para obter a divisão basta adicionar "\n" na frente do termo/elemento que deseja usar como início da segunda linha.

echo "Sun rise: <...strong...>07:24 am<../..strong..><..br ../..> Sun set: <..strong..>07:31 pm<../..strong..><..br.. /..> " | sed 's/Sun set/\nSun set/'
Sun rise: <...strong...>07:24 am<../..strong..><..br ../..> 
Sun set: <..strong..>07:31 pm<../..strong..><..br.. /..> 

Responder2

Eu adiciono minha implementação pessoal usando awk, de forma que você possa alterar separatorcomo quiser.

echo "line 1 and line 2" | awk -v separator="and" 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s%s", $1,FS,$2}'

Prefiro sempre usar awkpela possibilidade de usar variáveis ​​com facilidade. Se você quiser dividir sua linha com base em outrosseparadores, você pode simplesmente alterar o separatorvalor para outro.

Se você quiser cortar separatora segunda linha (quero dizer, você não quer ler "e linha 2", se apenas "linha 2"):

echo "line 1 and line 2" | awk -v separator="and " 'BEGIN {FS=separator} $0 ~ separator {printf "%s\n%s", $1,$2}'

informação relacionada