sed
é uma ferramenta de texto. Por padrão, ele gera uma linha de saída por linha de entrada. Embora seja fácil injetar novas linhas na saída (tornando mais linhas), não é tão fácil se livrar das novas linhas da entrada porque elas não pertencem às linhas que estão sendo processadas, elas as separam.
Trecho de info sed
(ênfase minha):
sed
operates by performing the following cycle on each lines of input: first,sed
reads one line from the input stream, removes any trailing newline, and places it in the pattern space. Then commands are executed; […].
No entanto, há N
:
N
Add a newline to the pattern space, then append the next line of input to the pattern space. If there is no more input thensed
exits without processing any more commands.
Isso permite que você processe linhas em pares, isso é o que você precisa. Inclua N
no seu último sed
assim:
sed -e 'N;s/dBm\n/dBm /'
Observe que isso só funcionará se a entrada inteira consistir logicamente em linhas que você deseja processar par a par, ou seja, essa estrutura lógica é OK:
line 1
paired 1
line 2
paired 2
…
enquanto este não é:
header
line 1
paired 1
line 2
paired 2
…
Nesse caso, sed
emparelhará header
com line 1
, paired 1
com line 2
etc., contra sua lógica. Outro mau exemplo:
line 1
paired 1
excessive line
line 2
paired 2
…
O excessive line
será emparelhado com line 2
. Isso quebrará a lógica de pares consecutivos.
Então você tem que ter cuidado. Por outro lado, se apenas as linhas estão emparelhadas corretamente, você não precisa se preocupar com as novas linhas que você está substituindo, porque você não pode alterar os pares que separam de qualquer maneira. Por esse motivo, incluir dBm
em seu padrão agora é completamente desnecessário. Seu último sed
também pode ser:
sed -e 'N;s/\n/ /'
Se você precisar de uma lógica mais complexa, consulte esta resposta . Usa sed
para concatenar linhas de acordo com seu conteúdo.