📜  在 Linux 中打印以字符串开头的行

📅  最后修改于: 2022-05-13 01:57:33.280000             🧑  作者: Mango

在 Linux 中打印以字符串开头的行

打印开头包含特定字符串的行,手动处理非常烦人,因此我们可以利用 bash 来设计一个 shell 脚本。搜索模式或行的最通用和最强大的工具是使用 grep、awk 或 sed 来找到最有效的问题解决方案。

首先要开始的是要在其中搜索字符串的文件以及字符串。这两个参数都将由用户输入。之后,我们可以使用 grep、sed 或 awk 三种工具中的任何一种。概念是一样的,我们只需要使用正则表达式在一行的开头找到字符串,并根据要使用的工具打印行。

用户输入

我们将从用户输入文件名和字符串。我们将使用 read 命令并传入 -p 参数来提示用户文本以显示他/她应该输入的内容。我们将输入存储在适当的变量名称中。

搜索和打印行

以下是用于执行查找和打印具有用户输入的字符串的行的操作的三个工具。任何人都可以根据用户的选择和要求使用。

方法一:使用GREP命令

grep 命令对于查找文件中的模式或行中的字符串非常有用。我们将使用简单的 grep 命令,使用 ^运算符搜索文件开头的单词并打印文件中的行。如果您熟悉 Linux 中的 grep 命令,这很容易理解。 grep 命令将简单地从文件中搜索输入字符串/word 并打印字符串仅出现在开头的行。最后一个参数,即“ grep -v grep || true” 仅在 grep 未找到任何匹配项时返回 0 。这不会显示令人讨厌的 shell return 1 错误,它不会打印任何内容,用户将理解文件中没有以该字符串开头的行。

#!/bin/bash

read -p "Enter the file name : " file
read -p "Enter the string to search for in the file : " str

grep "^$str" $file | { grep -v grep || true; }

使用 grep 命令在行首搜索字符串

grep 命令也有点灵活,因为它也允许我们打印行号。我们可以通过向上述命令添加一些参数来打印行号。 grep 后面的 -n 参数将打印在文件中找到字符串的行号。

#!/bin/bash

read -p "Enter the file name : " file
read -p "Enter the string to search for in the file : " str

grep -n "^$str" $file | { grep -v grep || true; }

使用 grep 命令在行首搜索字符串并打印行号。

grep 中的两种情况都区分大小写。为了使搜索不区分大小写,您可以在 grep 之后添加参数 -i,例如,

grep -i "^$str" $file | { grep -v grep || true; }

使用 grep 命令在行首搜索不区分大小写的字符串。

方法二:使用 SED 命令

sed 命令与 grep 命令不同,因为它是一个流编辑器,而不是一个只传递参数的命令。我们需要使用 -n 以便该命令不会打印下面命令的最后一个参数中提供的文件中的所有内容。以下正则表达式将搜索字符串变量并打印所有匹配的行。结果将是紧凑的输出。使用的正则表达式很简单,与 grep 类似,因为它仅使用 ^运算符匹配行首的字符串,反斜杠表示表达式是正则表达式。 p 参数将打印与正则表达式匹配的行。 grep 中的两种情况都区分大小写。

#!/bin/bash

read -p "Enter the file name : " file
read -p "Enter the string to search for in the file : " str

sed -n "/^$str/p" $file

使用 sed 命令在行首搜索字符串。

gnu sed 不支持不区分大小写的搜索或匹配。不过,您可以使用 Perl 添加不区分大小写的匹配项。

方法三:使用AWK命令

AWK 命令的正则表达式也是相同的,并以它自己的命令风格做同样的事情。正则表达式几乎类似于 sed 命令,它在开始时使用 ^运算符搜索字符串变量,然后简单地从命令打印匹配的行。 grep 中的两种情况都区分大小写。

#!/bin/bash

read -p "Enter the file name : " file
read -p "Enter the string to search for in the file : " str

awk "/^$str/{print}" $file

使用 awk 命令在行首搜索字符串。

要使 awk 中的搜索不区分大小写,您可以对同一命令进行一些更改。

awk "BEGIN {IGNORECASE = 1} /^$str/{print}" $file

使用 awk 命令在行首搜索不区分大小写的字符串。

awk 命令有一些内置函数,它们将参数设置为默认大小写敏感,我们可以更改 awk 命令的属性。