标签: regular-expression

如何使用具有管道字符的模式对多个模式进行 grep?

我想在多个文件中找到与两种模式之一匹配的所有行。我试图通过键入来找到我正在寻找的模式

grep (foo|bar) *.txt
Run Code Online (Sandbox Code Playgroud)

但是外壳将它解释|为管道并在bar不是可执行文件时抱怨。

如何在同一组文件中搜索多个模式?

shell grep quoting regular-expression

764
推荐指数
7
解决办法
176万
查看次数

grep 可以只输出匹配的指定分组吗?

说我有一个文件:

# 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 只输出与正则表达式中的分组(或特定分组)匹配的项目?

grep text-processing regular-expression

442
推荐指数
7
解决办法
49万
查看次数

如何使用 sed 替换多行字符串?

我注意到,如果我添加\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)

我怎样才能让它发挥作用?

sed utilities regular-expression

353
推荐指数
10
解决办法
45万
查看次数

`grep`、`egrep` 和 `fgrep` 之间有什么区别?

谁能告诉我grep, egrep, 和之间的技术差异fgrep并提供合适的示例?

我什么时候需要使用grepover egrep,反之亦然?

grep regular-expression

294
推荐指数
4
解决办法
33万
查看次数

如何使用 find 命令搜索多个扩展名

我可以jpg使用以下方法获取所有图像:

find . -name "*.jpg"  
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能将png文件添加到结果中呢?

find regular-expression

210
推荐指数
4
解决办法
20万
查看次数

使用 sed 查找和替换复杂字符串(最好使用正则表达式)

我有一个包含以下内容的文件:

<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)

并将括号中的内容替换为“某物”。

这可能吗?

sed quoting regular-expression

159
推荐指数
5
解决办法
51万
查看次数

如何使用多个AND模式运行grep?

我想通过模式之间的隐式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 regular-expression

117
推荐指数
5
解决办法
26万
查看次数

为什么我的正则表达式适用于 X 而不适用于 Y?

我写了一个正则表达式,它在某个程序(grep、sed、awk、perl、python、ruby、ksh、bash、zsh、find、emacs、vi、vim、gedit 等)中运行良好。但是当我在不同的程序(或不同的 unix 变体)中使用它时,它会停止匹配。为什么?

regular-expression wildcards

94
推荐指数
1
解决办法
1万
查看次数

Grep 'OR' 正则表达式问题

我正在尝试使用带有正则表达式的 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 正则表达式不匹配?在此先感谢您的帮助!

grep regular-expression

77
推荐指数
2
解决办法
10万
查看次数

查找具有特定扩展名的文件

我怎样才能find找到所有带有.xls.csv扩展名的文件?我看到了一个-regex选项,但我不知道如何使用它。

find regular-expression

74
推荐指数
2
解决办法
12万
查看次数