如何将管道输出的每一行加倍?

如何将管道输出的每一行加倍?

如何将每行输入的管道加倍?

例子:

echo "foobar" | MYSTERY_COMMAND
foob​​ar
foobar

答案1

只需使用sed p.

echo foobar | sed p

你也不需要cat

sed p input.txt
# or
sed p input.txt > output.txt

解释

psed“打印”的命令。

打印也是sed默认行动。因此,当您sed明确告诉打印时,结果是它打印每一行两次

假设您只想打印包含单词“kumquat”的行。您可以使用-nto 抑制sed的默认打印操作,然后明确告诉它打印匹配的行/kumquat/

sed -n /kumquat/p

或者,如果您只想打印第 5 行而不打印其他内容:

sed -n 5p

或者,如果您想打印从第 15 行到第 27 行的每一行:

sed -n 15,17p

如果你想打印每一行除了包含“kumquat”的行,您可以通过删除所有金橘行,并让sed打印该行的默认操作发生在未删除的行上来实现此目的。您不需要该-n标志或显式p命令:

sed /kumquat/d

sed使用简单的模式——动作语法。在上面的示例中,我展示了基于行号的模式和基于正则表达式的模式,以及两个操作(打印和删除)。 sed有一个很多比那更有力量。

我真的应该包括最常见和最有用的sed命令:

sed s/apples/oranges/g

这会将“苹果”的每个实例替换为“橙子”并打印结果。

g(如果在 ubstitute 命令中省略lobal 标志s,则只有每行的第一个实例会被更改。)


进一步阅读(强烈推荐):

答案2

cat input.txt | awk '1;1' > output.txt 

编辑:这是 joepd 的简洁版本,原文如下

cat input.txt | awk '{print $0 "\n" $0}' > output.txt 

相关内容