我试图将行号从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结合起来,或者这不可能吗?
答案 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
第一个Start
和End
之间的行,然后退出并避免使用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