选择“* line1 *”和“* line2 *”之间的行

时间:2011-12-16 18:09:59

标签: linux bash sed awk grep

如何在某些文字中使用grep从 line1 line2 选择行?

3 个答案:

答案 0 :(得分:1)

使用sed(为清晰起见,分成两行)。

echo "grep is a command-line text-search utility originally written for Unix." \
| sed -n 's/.*\(utility originally written\).*/\1/p'

这是做什么的:

  • -n参数禁止打印所有行。
  • 开头的s命令开始替换表达式。
  • 第一个/和第二个/之间的部分描述了您要查找的内容。
    • .*表示“任何事情”
    • \(utility originally written\)正是您在寻找的,在两个转义的括号之间,说这是我们以后可以反对引用的表达式。
    • .*再次表示“任何事情”
  • 第二个/和第三个/之间的部分是替换表达式。
    • \1说“使用第一部分括号中的第一个表达式”
  • 最终p表示“打印出匹配的替代品。”

修改:作为参考,原始问题(由于某种原因,它没有显示任何修改)如下所示。对于我的生活,我不知道他为什么让它变得更糟,更不具体。

  

如何使用grep从一行到另一行查找文本

     

让我说我只想要从“最初编写的实用程序”grep   以下文字。我怎样才能做到这一点?请帮忙

     

grep是一个最初编写的命令行文本搜索实用程序   的Unix。

答案 1 :(得分:1)

好吧,我们有一些文字

$> cat ./text
text
some text
string1
some text again
and that
string2
done
this should not be printed

我们希望获得 string1 string2 之间的界限。因此,awk是可以在那里使用的最佳工具。

$> cat ./btw
/string1/ { printing = 1 }
/string2/ { print $0; printing = 0 }
printing  { print $0 }

用法:

$> awk -f ./btw ./text
string1
some text again
and that
string2

答案 2 :(得分:0)

您可以使用-o option实用程序grep。像这样的东西 -

-o, --only-matching
              Show only the part of a matching line that matches PATTERN.

[jaypal:~] echo "grep is a command-line text-search utility originally written\
for Unix."| grep -o "utility originally written"
utility originally written
[jaypal:~]