Portanto, seria um pouco complicado fazer com que este trabalho portável em sed
- você deve estar olhando para cut
e / ou paste
com algum precursor regex gerando seu script nesse contexto - e isso é porque sed
sempre inserirá um \n
ewline antes da saída de um r
ead. Ainda assim, com GNU sed
:
sed '/First/{x;s/.*/cat file/e;H;x;s/\n//}' <<\IN
First
Second
Third
IN
Isso funciona em e
xecutando cat
sempre que encontrar seu endereço /First/
. Ele faz isso no espaço h
old (meio - um buffer alternativo de qualquer maneira - porque eu e x
muda eles realmente acontece no espaço padrão que costumava ser h
old space) para preservar o conteúdo da linha correspondente a First
e, em seguida, anexar a saída de cat
à sua linha e remover a intervenção \n
ewline.
OUTPUT:
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
]
Second
Third
Agora, se você quiser que todo o conteúdo do arquivo caiba entre duas partes de uma linha que tem que funcionar um pouco diferente, porque com o comando acima eu removo a nova linha entre o end da linha correspondente e do começo do arquivo. Ainda assim, você pode fazer isso também:
sed '/First/{s//&\n/;h
s/.*/{ cat file; echo .; }/e;G
s/\(.*\).\n\(.*\)\n//
}' <<\IN
Third
Second
First Second Third
Third
Second
First Second Third
IN
Isso divide a linha na correspondência com um caractere \n
ewline, salva em h
espaço antigo, e
xecutes cat
- que substitui o espaço padrão por sua saída - G
ets o conteúdo de o espaço de armazenamento anexado ao nosso novo espaço de padrão após outro caractere \n
ewline e, em seguida, reorganiza os delimitadores \n
ewline.
Eu faço echo .
para preservar qualquer caractere de ewline \n
em file
- mas se esse não for seu desejo (e não é muito relevante para o seu exemplo) você pode faça sem ele e remova o primeiro .
antes de .\n
na seguinte s///
ubstitution.
Pouco antes de reorganizar o espaço padrão, é assim:
^cat's output - any number of newlines.*.\nmatch on First\nrest of match$
OUTPUT:
Third
Second
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
] Second Third
Third
Second
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
] Second Third