Home > other >  Why doesn't this sed command put a newline
Why doesn't this sed command put a newline

Time:03-06

I have a file, ciao.py thas has only one line in it: print("ciao")

I want to do this: I want to do that via pipe stream, and als, if I do cat ciao.py | sed 's/.*/&\n&/' it would work, but I want to do this in two separated parts, simulating the case where I want to print it and then pass that to further commands.

If I do this:

cat ciao.py | sed 's/.*/&\n/' |tee >(xargs echo) | xargs echo

it does not work. It prints print("ciao") print("ciao") in the same line. I don't understand why, since I am putting \n with sed.

CodePudding user response:

I'd guess print cia is appearing twice on the same line because xargs is calling echo with multiple strings since xargs calls the command you provide it with groups of input lines at a time by default.

Is this what you're trying to do?

$ cat ciao.py | sed 's/.*/&\n/'  |tee >(xargs -n 1 echo) | xargs -n 1 echo
print(ciao)
print(ciao)

or:

$ cat ciao.py | sed 's/.*/&\n/'  |tee >(cat) | xargs -n 1 echo
print(ciao)
print(ciao)

There are, of course, better ways to get that output from that input, e.g.:

$ sed 'p' ciao.py
print("ciao")
print("ciao")
  • Related