首页 文章

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

提问于
浏览
0

我正在尝试从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

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

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 回答

  • 3

    这可能适合你(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
    
  • 4

    没有 grep 你可以做到这一点

    sed -n '/Start/,/End/w output1' file1
    

    应该管用 .

  • 2

    看起来您想要从第一次出现的Start到第一次出现的End(包括 endpoints )进行打印 . 那只是:

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

相关问题