问题描述
我想在多个文件中查找一个单词,并且每个结果仅返回一行,或者返回有限数量的字符(例如40到80个字符),而不是默认返回整行。
grep -sR 'wp-content' .
file_1.sql:3309:blog/wp-content
file_1.sql:3509:blog/wp-content
file_2.sql:309:blog/wp-content
目前,我看到以下内容:
grep -sR 'wp-content' .
file_1.sql:3309:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without.
file_1.sql:3509:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without.
file_2.sql:309:blog/wp-content-Progressively predominate impactful systems without resource-leveling best practices. Uniquely maximize virtual channels and inexpensive results. Uniquely procrastinate multifunctional leadership skills without visionary systems. Continually redefine prospective deliverables without.
最佳答案
egrep -Rso '.{0,40}wp-content.{0,40}' *.sh
这不会调用Radio-Symphonie-Orchestra,而是-o(仅匹配)。
图案前后最多40个字符。注意:* e * grep。
次佳答案
您可以结合使用grep和cut
使用您的示例,我将使用:
grep -sRn 'wp-content' .|cut -c -40
grep -sRn 'wp-content' .|cut -c -80
那将分别为您提供前40个或80个字符。
编辑:
另外,在grep中有一个标志,您可以使用:
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines.
这与我之前写的内容结合在一起:
grep -sRnm 1 'wp-content' .|cut -c -40
grep -sRnm 1 'wp-content' .|cut -c -80
这应该使您第一次在每个文件中显示它,并且仅显示前40个或80个字符。
第三种答案
如果将正则表达式更改为'^.*wp-content'
,则可以使用egrep -o
。例如,
egrep -sRo '^.*wp-content' .
-o
标志使egrep仅打印出匹配的行部分。因此,从行首匹配到wp-content
应该会在第一个代码块中产生示例输出。