BASH:在同一行中打印两行文件

时间:2014-11-05 02:38:42

标签: bash unix printing sed

我尝试在同一行中使用bash两行文本文件进行打印,并且只使用一个命令。

例如,如果您有下一个文件,并且您想要第1行和第3行

Cat
Bye
Bash
Dog
Hello

然后你需要一个返回以下

的命令
$ cmd
Cat Bash

这可能吗?我试试

$ sed -n '1,3{p;n;}' [FILENAME] 

但它会在两行不同的行中打印两行文字,例如:

Cat
Bash

感谢

3 个答案:

答案 0 :(得分:1)

$ sed -n '1 h; 3{x;G;s/\n/ /;p}' fname
Cat Bash

解释

  • -n

    这告诉sed除非我们明确要求,否则不要打印任何内容。

  • 1 h

    当我们到达第1行时,会告诉sed将其保存在' hold'空间。

  • 3 {x;G;s/\n/ /;p;}

    当我们到达第3行时,我们会执行以下操作:

    • x交换模式空间并保留空间。完成此操作后,模式空间具有第1行,保持空间具有第5行。

    • G将保留空间附加到模式空间。完成此操作后,模式空间具有第1行和第3行。

    • s/\n/ /用空格替换分隔第1行和第3行的换行符。完成后,第1行和第3行的数据在同一行。

    • p告诉sed打印结果。

在Mac OSX上,尝试:

sed -n -e '1 h' -e '3{x;G;s/\n/ /;p;}' fname

答案 1 :(得分:0)

这应该有效:

echo `sed -n '3,5{p;n;}' [FILENAME]`

只是一个额外的回声'用命令替换``加入行。

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed '1H;3H;$!d;x;s/\n//;y/\n/ /' file

通常将所需行添加到保留空间(HS)并删除除最后一行之外的所有行。在最后一行交换到HS,删除第一个换行符并将所有其他换行符转换为空格。

N.B。要收集的行可以按任何顺序陈述,只要它们位于最后一行的地址之前。 如果知道集合的顺序,则该方法可以缩短为:

sed '1h;2H;$!d;x;y/\n/ /' file