
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 sed
ou awk
ou split
para 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 separator
como 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 awk
pela possibilidade de usar variáveis com facilidade. Se você quiser dividir sua linha com base em outrosseparadores, você pode simplesmente alterar o separator
valor para outro.
Se você quiser cortar separator
a 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}'