【发布时间】:2012-01-22 05:22:54
【问题描述】:
如何使用 grep 选择某些文本中从 line1 到 line2 的行?
【问题讨论】:
-
您有什么问题?请具体说明...
-
我正在下载 html 页面,我想输出代码包含的图像链接...因为我需要从字符串“http://”搜索到“jpg”
如何使用 grep 选择某些文本中从 line1 到 line2 的行?
【问题讨论】:
使用 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。
【讨论】:
您可以使用-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:~]
【讨论】:
好吧,我们有一些文字
$> 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
【讨论】:
sed -n '/string1/,/string2/p'