我想在多个文件中找到与两种模式之一匹配的所有行。我试图通过键入来找到我正在寻找的模式
grep (foo|bar) *.txt
Run Code Online (Sandbox Code Playgroud)
但是外壳将它解释|为管道并在bar不是可执行文件时抱怨。
如何在同一组文件中搜索多个模式?
说我有一个文件:
# file: 'test.txt'
foobar bash 1
bash
foobar happy
foobar
Run Code Online (Sandbox Code Playgroud)
我只想知道“foobar”后面出现什么词,所以我可以使用这个正则表达式:
"foobar \(\w\+\)"
Run Code Online (Sandbox Code Playgroud)
括号表示我对 foobar 后面的单词特别感兴趣。但是当我执行 a 时grep "foobar \(\w\+\)" test.txt,我得到了与整个正则表达式匹配的整行,而不仅仅是“foobar 之后的单词”:
foobar bash 1
foobar happy
Run Code Online (Sandbox Code Playgroud)
我更希望该命令的输出如下所示:
bash
happy
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉 grep 只输出与正则表达式中的分组(或特定分组)匹配的项目?
我注意到,如果我添加\n到一个模式来替换 using sed,它不匹配。例子:
$ cat > alpha.txt
This is
a test
Please do not
be alarmed
$ sed -i'.original' 's/a test\nPlease do not/not a test\nBe/' alpha.txt
$ diff alpha.txt{,.original}
$ # No differences printed out
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它发挥作用?
谁能告诉我grep, egrep, 和之间的技术差异fgrep并提供合适的示例?
我什么时候需要使用grepover egrep,反之亦然?
我可以jpg使用以下方法获取所有图像:
find . -name "*.jpg"
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能将png文件添加到结果中呢?
我有一个包含以下内容的文件:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
Run Code Online (Sandbox Code Playgroud)
我需要制作一个脚本,将第一行中的“name”更改为“something”,将第二行中的“password”更改为“somethingelse”,将第三行中的“name”更改为“somethingdifferent”。我不能依赖这些在文件中出现的顺序,所以我不能简单地用“something”替换第一次出现的“name”,用“somethingdifferent”替换第二次出现的“name”。我实际上需要搜索周围的字符串,以确保我找到并替换了正确的东西。
到目前为止,我已尝试使用此命令来查找和替换第一个“名称”出现:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
Run Code Online (Sandbox Code Playgroud)
但是它不起作用所以我认为其中一些字符可能需要转义等。
理想情况下,我希望能够使用正则表达式来匹配两个“用户名”出现并仅替换“名称”。像这样的东西,但有sed:
<username>.+?(name).+?</username>
Run Code Online (Sandbox Code Playgroud)
并将括号中的内容替换为“某物”。
这可能吗?
我想通过模式之间的隐式AND获得多模式匹配,即相当于在一个序列中运行几个 grep:
grep pattern1 | grep pattern2 | ...
Run Code Online (Sandbox Code Playgroud)
那么如何将其转换为类似的东西?
grep pattern1 & pattern2 & pattern3
Run Code Online (Sandbox Code Playgroud)
我想使用单个 grep,因为我正在动态构建参数,因此所有内容都必须放在一个字符串中。使用过滤器是系统特性,而不是 grep,所以它不是它的论据。
不要将此问题与:
grep "pattern1\|pattern2\|..."
Run Code Online (Sandbox Code Playgroud)
这是一个OR多模式匹配。
我写了一个正则表达式,它在某个程序(grep、sed、awk、perl、python、ruby、ksh、bash、zsh、find、emacs、vi、vim、gedit 等)中运行良好。但是当我在不同的程序(或不同的 unix 变体)中使用它时,它会停止匹配。为什么?
我正在尝试使用带有正则表达式的 grep 来查找文件中与 2 个可能字符串中的 1 个匹配的行。这是我的grep:
$ grep "^ID.*(ETS|FBS)" my_file.txt
Run Code Online (Sandbox Code Playgroud)
上面的 grep 没有返回任何结果。但是,如果我执行:
$ grep "^ID.*ETS" my_file.txt
Run Code Online (Sandbox Code Playgroud)
或者
$ grep "^ID.*FBS" my_file.txt
Run Code Online (Sandbox Code Playgroud)
我确实匹配特定的行。为什么我的 OR 正则表达式不匹配?在此先感谢您的帮助!
我怎样才能find找到所有带有.xls或.csv扩展名的文件?我看到了一个-regex选项,但我不知道如何使用它。