newline - sed: Why does command q add a new line? -


suppose following command

echo -en "abc1\ndef2\nghi1" | sed -n 'p; d;' 

in case output same without sed @ all. last line still has no new line character. next command

echo -en "abc1\ndef2\nghi1" | sed -n '$! {p; d;}; /1$/ {s/1$//; p; d;}' 

sed prints last line without modification. last line shortened 1 character. still there no new line character on last line. next command

echo -en "abc1\ndef2\nghi1" | sed -n '$! {p; d;}; /1$/ {s/1$//; p; q1;}' 

("d" replaced "q1" in last command block. same output before, time there additional new line character in last line.

  • why?
  • how fix?

(for interested in intention command: given stdin, want scan last character, pass on stdin stdout without last character , set exit code based on character. there should no other modification. sed seems perfect, if there wouldn't newline problem

sed -n '   $! {p; d;};            #print non last line, next cycle   /0$/ {s/0$//; p; d};   #last line ending 0? remove 0, print, next cycle   /1$/ {s/1$//; p; d};   #last line ending 1? remove 1, print, next cycle   {p}                    #fall back, print last line  ' 

so far script works perfect regarding newline issue. no new line added. if replace "d" command "q"

sed -n '   $! {p; d;};            #print non last line, next cycle   /0$/ {s/0$//; p; q0};  #last line ending 0? remove 0, print, exit 0   /1$/ {s/1$//; p; q1};  #last line ending 1? remove 1, print, exit 1   {p}                    #fall back, print last line  ' 

the newline problem arise...

other solutions welcome, should fast possible.

i guess bug. according manual, q should not print pattern space if auto-print disabled. thus, should not print anything. since using gnu sed, avoid problem using q instead of q. @ least, works me (version 4.2.2).


Comments

Popular posts from this blog

java - Static nested class instance -

c# - Bluetooth LE CanUpdate Characteristic property -

JavaScript - Replace variable from string in all occurrences -