sed追加从stdout获得的文本

时间:2014-02-07 21:09:49

标签: bash sed

我知道sed可以通过几种不同的方式附加文字:

  1. 追加字符串NEW_TEXT

    sed -i '/PATTERN/ a NEW_TEXT' file
    
  2. 追加文件file_with_new_text的内容:

    sed -i '/PATTERN/ r file_with_new_text' file
    
  3. 但是,无论如何通过stdout将文本追加到sed?我希望得到相当于:

    # XXX,YYY,ZZZ are line numbers
    # The following appends lines XXX-YYY in file1
    # after line ZZZ in file2.
    
    sed 'XXX,YYY p' file1 > /tmp/file
    sed -i 'ZZZ r /tmp/file' file2
    

    无需使用临时文件。这可能吗?

2 个答案:

答案 0 :(得分:6)

您可以阅读/dev/stdin。显然,这只能在每个进程中使用一次。

示例:

$ cat file1
this is text from file1
etc

$ cat file2
Hello world from file2

$ sed -n '1p' file1 | sed -i '$ r /dev/stdin' file2

$ cat file2
Hello world from file2
this is text from file1

答案 1 :(得分:3)

您可以使用r命令重定向运算符:

sed -i '/ZZZ/r '<(sed -n '1p' file1) file2