使用 BASH“Grep OR / Grep AND / Grep NOT”运算符

使用 BASH“Grep OR / Grep AND / Grep NOT”运算符

我知道 grep 可以用来进行部分搜索,例如如果我使用

echo "Enter example"
read example

echo "Enter Subject"
read subject
grep -i ^$example info.txt | grep -i ^[^,]*:$subject 

输出将是包含字符串的所有行,假设我键入“example”,它将显示包含字符串“example”的字符串的所有行。

我需要这个功能,以便用户可以对 info.txt 中的可用阅读材料列表进行一般搜索。

我目前正在使用 if 语句,如果 $example 和 $subject 中都有信息,它将进行特定搜索,例如字面字符串匹配字符串,否则它将返回 false。

有没有办法让搜索更灵活,或者让它具体搜索,就像info.txt中有很多例子一样。

  1. 例1:基础数学
  2. 例2:高等数学
  3. 示例3:如何创建一个好的示例?

因此,如果我输入“示例”和“数学”,它将返回 false。但是,如果我键入“示例 1”和“基础数学”,它将回显输出。我四处询问,我的大多数朋友都推荐我使用 awk,但如果我这样做,我将不得不重做我的整个脚本,因为我在大多数函数中使用 grep 来进行搜索。

我的老师当时只教了我们grep,因此,只了解基本的grep,不了解awk。

答案1

这是 shellhacks.com 上的一个不错的小页面,其中显示了示例“使用 BASH“Grep OR / Grep AND / Grep NOT”运算符“,它有sed&awk等价物。我将其粘贴到此处,您可以使用它们以某种或任何顺序搜索$subjectand/or/not 。$example

使用 BASH“Grep OR / Grep AND / Grep NOT”运算符

在下面的文章中,您将找到几个示例,展示如何在 Linux GREP / SED / AWK 命令中使用 OR / AND / NOT 运算符。

使用这样的任务是很常见的任务Linux 命令行工具作为 grep、sed 和 awk使用正则表达式解析文件

我将展示如何查找所有行, 那包含任意几种模式,如何打印文件中的所有行,即匹配多个模式以及如何查找并打印所有行不匹配模式

Grep 'OR' 运算符

查找文件中与以下任意模式匹配的所有行。

使用 GREP 命令:

grep "pattern1\|pattern2" file.txt
grep -E "pattern1|pattern2" file.txt
grep -e pattern1 -e pattern2 file.txt
egrep "pattern1|pattern2" file.txt

使用 AWK 命令:

awk '/pattern1|pattern2/' file.txt

使用 SED 命令:

sed -e '/pattern1/b' -e '/pattern2/b' -e d file.txt

Grep 'AND' 运算符

查找并打印文件中与多个模式匹配的所有行。

使用 GREP 命令:

grep -E 'pattern1.*pattern2' file.txt # in that order
grep -E 'pattern1.*pattern2|pattern2.*pattern1' file.txt # in any order
grep 'pattern1' file.txt | grep 'pattern2' # in any order

使用 AWK 命令:

awk '/pattern1.*pattern2/' file.txt # in that order
awk '/pattern1/ && /pattern2/' file.txt # in any order

使用 SED 命令:

sed '/pattern1.*pattern2/!d' file.txt # in that order
sed '/pattern1/!d; /pattern2/!d' file.txt # in any order

Grep 'NOT' 运算符

查找并打印所有与模式不匹配的行。

使用 GREP 命令:

grep -v 'pattern1' file.txt

使用 AWK 命令:

awk '!/pattern1/' file.txt

使用 SED 命令:

sed -n '/pattern1/!p' file.txt

这是一个链接GNU 的 Grep 手册。它有很多好的信息,包括常用表达还有一些使用示例

该页面是一个正则表达式上的“备忘单”

相关内容