使用来自grep的行号使用sed打印行

时间:2014-05-03 14:00:29

标签: bash sed grep pipe

我试图将行号从grep传输到sed。

首先,我用sed提取了我要打印的内容的起点和终点:

grep -n "Start" file1 | cut -d: -f 1 | head -n 1
grep -n "End" file1 | cut -d: -f 1 | head -n 1

现在我需要使用这些数字来打印从开始到结束的所有内容。 E.g。

sed -ne '1,30w output1' file1

我不确定如何做到这一点,因为将行号输入到sed将被视为"输入"正确?

示例:

Start
some text
some more text
End
Start
some text
some more text
End

因为有不止一个开始和结束我从grep切割其余的行数。而且我应该把grep和sed结合起来,或者这不可能吗?

3 个答案:

答案 0 :(得分:4)

您可以在没有grep

的情况下执行此操作
sed -n '/Start/,/End/w output1' file1

应该有用。

答案 1 :(得分:3)

看起来您想要从第一次出现的Start到第一次出现的End(包括端点)进行打印。那就是:

awk '/Start/{found=1} found{print; if (/End/) exit}' file

答案 2 :(得分:2)

这可能适合你(GNU sed):

sed -ne '/Start/,/End/w outputfile' -e '/End/q' file

这将写入outputfile第一个StartEnd之间的行,然后退出并避免使用grep的必要性。

如果你必须使用grep那么:

sed -n "$(grep -n "Start" file | cut -d: -f 1 | head -n 1),$(grep -n "End" file | cut -d: -f 1 | head -n 1)"'p' file