Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 结合两个相互依赖的命令的sed命令_Linux_Shell_Sed_Editor - Fatal编程技术网

Linux 结合两个相互依赖的命令的sed命令

Linux 结合两个相互依赖的命令的sed命令,linux,shell,sed,editor,Linux,Shell,Sed,Editor,我需要一个sed命令的帮助,该命令将生日行复制到标准输出,删除所有以“a”开头的行。 假设我的sample.txt文件如下所示: A birthday is very much celebrated. Today is my birthday. I can celebrate my birthday. A man can do anything. 这是示例输出: 今天是我的生日。 我可以庆祝我的生日 因此,对于生日系列: sed -n /birthday/p sample.txt 对于删

我需要一个sed命令的帮助,该命令将生日行复制到标准输出,删除所有以“a”开头的行。 假设我的sample.txt文件如下所示:

A birthday is very much celebrated. 
Today is my birthday.
I can celebrate my birthday. 
A man can do anything.
这是示例输出:

今天是我的生日。
我可以庆祝我的生日

因此,对于生日系列:

sed -n /birthday/p sample.txt
对于删除以“A”开头的行:

现在,我不知道如何组合这两行,以便它们可以根据问题工作。

您需要的是
|
。它从左侧获取命令的输出,并通过将STDOUT连接到STDIN将其“管道”到右侧的命令

因此,在您的情况下,您应该:

sed-n/birthday/p sample.txt | sed-n'/^A/!p'


编辑:使用sed格式化,不需要管道-在打印包含“生日”的行之前,可以删除以“A”开头的行:

或者使用sed的默认打印操作(不通过
-n
选项禁用):删除不包含“生日”的行。任何未被删除的行都将打印到标准输出

sed '/^A/d; /birthday/!d' file
使用此方法,可以在不影响逻辑的情况下交换地址顺序:
/birth/!d/^A/d
产生相同的输出。

这可能适合您(GNU-sed):

如果一行以
a
开头,则删除该行,并删除没有生日的任何其他行

或:


打印不以
A
开头且包含
birth

的行。请将示例输入(无描述、无图像、无链接)和您希望的输出添加到您的问题中(无评论)。好的,我现在编辑了我的问题。这可能会有帮助:
sed'/^[^A].*birth/!d'文件
sed -n '/^A/d; /birthday/p' file
sed '/^A/d; /birthday/!d' file
sed '/^A/d;/birthday/!d' file
sed -n '/^[^A].*birthday/p' file