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

ead*_*sjr 3 command-line pipe awk

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

例子:

echo "foobar" | MYSTERY_COMMAND
foob​​ar
foob​​ar

Wil*_*ard 5

只需使用sed p.

echo foobar | sed p
Run Code Online (Sandbox Code Playgroud)

你也不需要cat

sed p input.txt
# or
sed p input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

解释

psed“打印”命令。

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

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

sed -n /kumquat/p
Run Code Online (Sandbox Code Playgroud)

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

sed -n 5p
Run Code Online (Sandbox Code Playgroud)

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

sed -n 15,17p
Run Code Online (Sandbox Code Playgroud)

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

sed /kumquat/d
Run Code Online (Sandbox Code Playgroud)

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

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

sed s/apples/oranges/g
Run Code Online (Sandbox Code Playgroud)

这将用“oranges”替换“apples”的每个实例并打印结果。

(如果您gsubstitute 命令中省略了lobal 标志,则只会更改每行上的第一个实例。)


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