为什么这个 sed 命令不换行

Why doesn't this sed command put a newline

我有一个文件,ciao.py 其中只有一行:print("ciao")

我想这样做:我想通过管道流来做到这一点,另外,如果我这样做 cat ciao.py | sed 's/.*/&\n&/' 它会起作用,但我想在两个独立的部分中做到这一点,模拟以下情况我想打印它,然后将其传递给其他命令。

如果我这样做:

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

它不起作用。它在同一行打印 print("ciao") print("ciao") 。我不明白为什么,因为我将 \n 与 sed 放在一起。

我猜 print cia 在同一行出现了两次,因为 xargs 使用多个字符串调用 echo 因为 xargs 调用了你提供给它的命令默认情况下一次输入多组。

这是你想要做的吗?

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

或:

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

当然,有更好的方法从输入中获取输出,例如:

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