我需要搜索文件夹中的文件并复制所有以变量开头的文本。
例如:
文件 A.txt、B.txt、C.txt 和 D.txt 分别包含字符串“Hello1”、“Hello2”、“Hello3”和“Hello4”。我需要能够搜索所有以“Hello”开头的单词并输出结果。
在这个特殊情况下,将搜索 A.txt、B.txt、C.txt 和 D.txt,输出为
Hello1
Hello2
Hello3
Hello4
我环顾四周,发现以下内容允许我导出所有包含文本的文件,但我不确定如何或是否可以适应我的需要。
grep -l Hello *.txt
答案1
你可能想要grep -ohw 'Hello[0-9]*' *.txt
。
-o
仅输出行的匹配部分-h
禁止grep
输出文件名-w
仅搜索grep
整个单词,因此Hello1Hello2
不会匹配(如果没有,则会匹配两次-w
)
您需要调整模式,因为文字Hello
只会匹配Hello
并随后输出该文字。由于您想要匹配Hello1
(Hello5
甚至Hello123
),因此您需要多个数字([0-9]*
)。
不要忘记引用该模式,这样它就*
不会被 shell 扩展。
答案2
这将查找以变量开头的单词。
var=Hello
grep -ho "\\<${var}[^[:blank:]]*" *.txt
grep\<
是“单词开头”锚点。
我假设您的单词是用空格分隔的,因此单词的其余部分是非空白字符。您可以很容易地将其更改为数字( [0-9]*
)或类似 perl 的“单词字符”( )。[[:alnum:]_]*