BASH:将文件的两行内容在同一行上打印

3
我正在尝试使用bash在同一行上只用一个命令打印文本文件的两行。
例如,如果您有下面的文件并且想要第1和第3行。
Cat
Bye
Bash
Dog
Hello

然后您需要一个返回以下内容的命令

$ cmd
Cat Bash

那是可能的吗?我尝试着用


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

但它会将这两行文本分别打印在两行中,就像这样:
Cat
Bash

感谢您
3个回答

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

解释

  • -n

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

  • 1 h

    当我们到达第一行时,这告诉sed将其保存在“保持”空间中。

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

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

    • x交换模式空间和保留空间。 这样做后,模式空间具有第一行,保留空间具有第五行。

    • G将保留空间附加到模式空间中。 这样做后,模式空间具有第一行和第三行。

    • s/\n/ /用空格替换分隔第一行和第三行的换行符。 这样做后,来自第一行和第三行的数据位于同一行上。

    • p告诉sed打印结果。

在Mac OSX上,尝试使用以下命令:
sed -n -e '1 h' -e '3{x;G;s/\n/ /;p;}' fname

0

这应该可以工作:

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

使用``命令替换来添加额外的'echo'以连接这些行。


0
这可能适用于您(GNU sed):
sed '1H;3H;$!d;x;s/\n//;y/\n/ /' file

通常将所需的行附加到保留空间(HS)中,并删除除最后一行以外的所有行。在最后一行上,切换到HS,删除第一个换行符,并将所有其他换行符转换为空格。
注意:要收集的行可以按任何顺序声明,只要它们出现在最后一行的地址之前即可。 如果已知收集的顺序,则可以缩短方法为:
sed '1h;2H;$!d;x;y/\n/ /' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接