【问题标题】:Select lines between "*line1*" and "*line2*" [closed]选择“*line1*”和“*line2*”之间的行[关闭]
【发布时间】:2012-01-22 05:22:54
【问题描述】:

如何使用 grep 选择某些文本中从 line1line2 的行?

【问题讨论】:

  • 您有什么问题?请具体说明...
  • 我正在下载 html 页面,我想输出代码包含的图像链接...因为我需要从字符串“http://”搜索到“jpg”

标签: linux bash sed awk grep


【解决方案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 是一个命令行文本搜索实用程序,最初是为 Unix。

【讨论】:

  • 我需要可以从实用程序搜索到书面的命令
  • 您不应该对与您的问题一样模糊的问题的答案投反对票。阅读有关如何提问的常见问题解答。
  • 我根本无法投票。你在干什么?!
【解决方案2】:

您可以使用-o optiongrep 实用程序。像这样 -

-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:~]

【讨论】:

  • 我如何从实用程序搜索到书面?并显示介于两者之间的所有内容
  • 你说的写的实用性是什么意思?
  • 我想从 html 文件中 grep 一个图片链接,我只需要没有所有 html 代码的链接。
【解决方案3】:

好吧,我们有一些文字

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

我们想要得到 string1string2 之间的线。所以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

【讨论】:

  • 实际上,sed 会更简单一些,如果这是他所要求的:sed -n '/string1/,/string2/p'
  • Dan Fego,太棒了,不知道!
  • sed -n '/http/,/jpg/p' wget.html 给了我整个页面
猜你喜欢
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2012-07-14
  • 1970-01-01
  • 2017-06-14
  • 2021-01-17
相关资源
最近更新 更多