目录
提高命令行生产效率
一、前言
在 Linux 日常管理过程中,与 Windows 不同,在 Linux 中需要使用到大量的命令来对系统进行操作,甚至某些系统中,只安装了文本的界面,这无疑对使用者的命令操作水平有较高的要求。本文结合实例介绍了 Shell 命令中的部分内容,在阅读本文章节之前,假定你已经有一定的 Linux 基础。
二、内容概要
1.通过编写简单的shell脚本自动执行命令序列。
2.使用for循环和条件,借助脚本中的项目列表或通过命令行高效地运行命令。
3.使用grep命令和正则表达式,查找与日志文件和命令输出中的模式相匹配的文本。
三、文章内容
1.创建和执行Bash Shell脚本
在实际的生产中,系统的维护人员,会面临大量的数据、成百上千的服务器组成的集群、也无法时时刻刻的监控着系统的运行,而一个又一个的可执行脚本就能帮助我们高效的完成生产任务。
(1)什么是Bash Shell脚本
Bash Shell脚本是一种用于在Linux和Unix系统中执行一系列命令的脚本文件。Bash(Bourne Again SHell)是一种Shell解释器,它提供了一个与操作系统交互的命令行界面。脚本是由一系列命令和控制结构组成的文本文件,可以通过执行脚本来自动化任务和处理重复性工作。
使用Bash Shell脚本,可以编写一些简单或复杂的脚本来完成各种任务,如文件操作、数据处理、系统配置等。脚本中的命令按照顺序执行,可以包含条件判断、循环、函数等控制结构,使脚本具备逻辑和灵活性。
脚本文件通常以`.sh`为后缀。要执行脚本,可以通过在终端中输入脚本的路径或使用`bash`命令来运行它。
Bash Shell脚本提供了方便且强大的方式来自动化和简化命令行操作,能提高完成日常任务的效率和准确性,并可以在系统配置、软件部署等方面发挥重要作用。
(2)Bash Shell脚本的格式
Bash Shell脚本的格式主要由以下几个元素组成:
①. Shebang(Shebang行):在脚本的第一行,使用`#!/bin/bash`或类似的形式来指定脚本使用的解释器。这个行以`#!`开头,紧跟着解释器的路径。
②. 注释:使用`#`符号来注释代码,可以提供有关脚本的说明和解释。注释的内容不会被执行。
③. 命令:脚本中的命令按顺序执行,每个命令占据一行或多行。命令可以是系统命令、自定义函数、变量赋值等。
④. 变量:使用变量来存储和引用数据。变量可以通过赋值操作来创建,使用时需要使用`$`符号进行引用。例如:`name="John"`,可以通过`echo $name`来输出变量的值。
⑤. 控制结构:使用条件语句(如`if`、`case`)、循环语句(如`for`、`while`)和函数来实现流程控制和重复执行。
⑥. 输入输出:使用`echo`进行输出,可以将文本打印到终端窗口。使用重定向符号`>`或`>>`将输出写入文件。从终端读取输入可以使用`read`命令。
⑦. 引用:使用引号`'`和`"`来引用字符串,其中`'`引用的字符串保持原样,而`"`引用的字符串可以解析变量和特殊字符。
以上是Bash Shell脚本的基本格式要素。可以根据具体需求,结合使用这些元素来编写功能丰富的脚本。
注:在最后保存脚本文件时,使用`.sh`作为文件的扩展名以标识它是一个Bash Shell脚本文件。
2.如何创建bash Shell脚本,并执行脚本
在Linux系统中,你可以使用文本编辑器创建一个bash Shell脚本,并通过执行该脚本运行一系列的命令。下面是创建和执行bash Shell脚本的详细步骤:
(1)打开一个文本编辑器
如Vi、Vim、Nano或Gedit,我这里使用Vim。
vim myscript.sh
(2)输入你要执行的命令
例如,在终端中输出 "Hello World!"。
按下键盘上的i键即可编辑脚本内容,在文档中输入一下内容:
#!/bin/bash
echo "Hello World!"
在脚本的第一行,`#!/bin/bash` 声明了使用bash解释器来执行脚本。
echo 是一个在终端中输出文本的命令。这里它可以打印“Hello world!”到屏幕上。
(3)保存并关闭文件
编辑完毕后,按下键盘上的Esc键,即可退出编辑模式。
再按“Shift+:”,输入wq即可保存并退出脚本的编辑。
提示:退出文档编辑的按键操作:
保存::w
退出::q
强制保存::w!
强制退出::q!
(4)授予脚本执行权限
chmod +x myscript.sh
这个命令将允许脚本文件被执行。
(5)执行脚本。
./myscript.sh
或者,你可以使用以下命令执行脚本,其中 `./` 表示当前目录
bash myscript.sh
脚本将开始执行,并按照其中的命令顺序在终端中输出结果。
以上就是在Linux系统中创建和执行bash Shell脚本的步骤。你可以根据自己的需求编写更复杂的脚本,以完成各种任务。
3.使用循环更高效的运行命令行
(1)循环迭代命令的作用
系统管理员在其日常活动中经常会遇到重复任务。重复任务可能表现为对目标多次执行某个操作,例如在10分钟内,每隔一分钟检查进程来查看其是否已完成。任务重复还可能表现为一-次对多个目标执行某个操作,例如对系统上的每个数据库进行备份。for循环是Bash提供的多个shell循环结构之一,并且可用于任务迭代。
(2)在命令行出使用循环处理项目
① for循环结构
for VARIABLE in LIST;do
COMMAND VARIABLE
done
注解:
这是一个典型的Shell脚本语法,用于在循环中执行一系列命令。
- `VARIABLE` 是一个变量,它在每次循环迭代时会被赋予 `LIST` 中的一个值。
- `LIST` 是一个包含多个值的列表,循环将依次遍历该列表中的每个值。
- `COMMAND VARIABLE` 是要执行的命令,其中 `VARIABLE` 是当前循环迭代的值。
- `do` 关键字标记循环体的开始。
- `done` 关键字表示循环结束。
对于每个 `LIST` 中的值,循环将依次执行 `COMMAND VARIABLE` 中的命令。这种循环结构可以用于批量处理数据或重复执行某项任务。
② for循环的使用
为for循环提供字符串列表的方式有多重,可以是命令行输入的字符串列表、通过不同类型的shell扩展生成的,如变量扩展、花括号扩展、文件名扩展或命令替换。
例:
for HOST in host1 host2 host3;do echo $HOST;done
这个示例是一个简单的示例,用于在循环中打印每个主机的名称。
- `HOST` 是循环变量,它在每次循环迭代时会被赋予列表中的一个值。
- `host1 host2 host3` 是一个包含多个主机名的列表。
- `echo $HOST` 是要执行的命令,其中 `$HOST` 表示当前循环迭代的主机名。
对于每个主机名,在循环中执行 `echo $HOST` 命令会打印该主机的名称。循环将依次打印 `host1`、`host2` 和 `host3`。
(3) 在脚本中使用退出代码
- 在脚本中可以使用 `exit` 命令来随时退出脚本,并返回一个退出代码给父进程。
- `exit` 命令立即终止脚本的执行,并不会执行后续的脚本内容。
- 可以在 `exit` 命令中指定一个可选的整数参数作为退出代码,该代码表示脚本的执行状态。
- 退出代码是一个整数,取值范围是从 0 到 255。退出代码为 0 表示脚本执行成功没有错误,其他非零值表示脚本执行发生错误。
- 父进程可以通过 `?` 变量来访问脚本的退出代码。例如,`$?` 可以获取到上一个命令的退出代码。
通过使用 `exit` 命令,可以在脚本的任何位置确定脚本是否需要提前退出,并返回适当的退出代码给父进程。
示例: 先创建一个hell.sh,脚本文件,并赋予脚本可执行权限,最后执行脚本。
touch hello.sh
vim hello.sh
chmod +x hello.sh
./hello.sh
(4)测试脚本输入
- 为了确保脚本不会因为意外情况而中断,可以避免对输入进行假设,如命令行参数、用户输入、命令替换、变量扩展和文件名扩展。这样可以增加脚本的健壮性和可靠性。
- 使用Bash的 `test` 命令可以执行完整性检查,并根据检查结果生成一个退出代码,该退出代码可以通过 `$?` 变量访问。
- 退出状态值0表示测试成功,非零值表示测试失败。可以使用 `echo $?` 来查看 `test` 命令的退出代码,从而判断测试的结果。
- `test` 命令支持多个运算符,用于比较数字的大小关系(大于、大于等于、小于、小于等于,等于),比较文本字符串是否相同或不同,以及评估变量是否具有特定值。
使用 `test` 命令进行测试可以帮助确保脚本在执行过程中进行适当的检查和验证,以处理可能发生的错误情况。
示例:
test 1 -gt 0 ; echo $?
test 1 -gt 1 ; echo $?
可以使用Bash的测试命令语法[<TESTEXPRESSION>]来执行测试。也可以使用Bash的较新扩展测试命令语法[[<TESTEXPRESSION> ]]
以下示例演示了使用Bash 的 test命令语法和 Bash的数字比较运算符
以下示例演示了Bash 的 字符串比较运算符的使用。
以下示例演示了Bash 的 字符串一元运算符的使用。
注:
- 在测试命令(例如 `test` 命令)中,方括号 `[ ]` 内的空格字符是必需的,用于分隔测试表达式中的词语和元素。
- Shell 的命令解析例程会通过识别空格和其他元字符来将命令行划分为不同的词语和运算符。
- 方括号 `[ ]` 在 `test` 命令中是一个内置别名,表示进行条件测试。
- 在 shell 中,无论是命令、子命令、选项、参数还是其他令牌元素,都需要使用空格进行分隔。
使用适当的空格字符可以确保命令行的正确解析,正确分隔各个参数和操作符,以便正确执行测试和命令的功能。
(5)条件结构
简单的shell脚本表示从头到尾执行的命令的集合。条件结构允许用户在shell脚本中包含决策,以便仅当满足特定条件时才执行脚本的特定部分。
①if/then结构
Bash中最简单的条件结构是if/then结构,语法如下:
if <CONDITION>; then
<STAEMENT>
...
<STAEMENT>
fi
这个代码片段是一个典型的Shell脚本中的条件语句,用于根据特定条件来执行一系列操作。
- `<CONDITION>`:在条件语句中,`<CONDITION>`是一个表达式,表示要检查的条件。这可以是一个逻辑表达式,例如比较操作符(如等于、不等于、大于、小于等),或者是变量的状态。
- `then`:当条件 `<CONDITION>` 为真时,`then`关键字后面的代码块将被执行。
- `<STATEMENT>`:`<STATEMENT>`代表在条件为真时要执行的一条或多条语句。可以有任意数量的语句,并且每个语句应在单独的行上。
- `fi`:`fi`是`if`语句的结束标记,表示条件语句的结束。
当 `<CONDITION>` 为真时,条件语句中位于 `then` 和 `fi` 之间的代码块将被执行。否则,将跳过代码块并继续执行后续的脚本代码。
例:
设计一个简单的程序,用于检查用户输入的数字是否为正数。如果是正数,则打印出"这是一个正数",否则打印出"这不是一个正数"。
① 创建一个新的Shell脚本文件,例如"check_positive.sh"。
touch check_positive.sh
② 在脚本文件中输入以下代码:
vim check_positive.sh
#!/bin/bash
echo "请输入一个数字:"
read num
if [ $num -gt 0 ]; then
echo "这是一个正数"
else
echo "这不是一个正数"
Fi
③ 在命令行中进入保存脚本的文件夹,并给脚本文件添加可执行权限:
chmod +x check_positive.sh
④ 运行脚本:
./check_positive.sh
⑤ 输入一个数字并按回车键,脚本将根据输入的数字进行判断并输出结果。
可以尝试运行脚本并测试不同的数字值,观察输出结果是否符合预期。这个示例展示了if/then结构的用法,根据条件执行不同的操作。
(6)if/then/else结构
if/then结构可以进一步扩展,以便能够根据是否满足条件来采取不同的操作集合。使用if/then/else结构可实现此目标。
if <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
else
<STATEAENT>
...
<STATEAENT>
fi
- `<CONDITION>`: `<CONDITION>` 是一个表示要检查的条件的表达式。这可以是一个逻辑表达式,比较操作符(例如等于、不等于、大于、小于等)或变量的状态。
- `then`: 当条件 `<CONDITION>` 为真时,`then` 之后的代码块将被执行。
- `<STATEMENT>`: `<STATEMENT>` 代表在条件为真时要执行的一条或多条语句。可以有任意数量的语句,并且每个语句应位于单独的行上。
- `else`: 当条件 `<CONDITION>` 为假时,`else` 之后的代码块将被执行。
- `<STATEMENT>`: `<STATEMENT>` 代表在条件为假时要执行的一条或多条语句。与前面的 `<STATEMENT>` 类似,可以有任意数量的语句。
- `fi`: `fi` 是条件语句的结束标记,表示条件语句的结束。
如果 `<CONDITION>` 为真,则执行 `then` 后面的代码块;如果 `<CONDITION>` 为假,则执行 `else` 后面的代码块。通过使用 `if/then/else` 结构,可以根据不同的条件情况执行不同的操作,提供更灵活的脚本控制流程。同时,`fi` 用于结束整个条件语句。
可以在 `if` 条件之前和 `else` 条件之前添加任意数量的语句,根据需求进行扩展和修改。
例:
假设我们要编写一个脚本,用于检查当前系统日期是工作日还是周末。如果是工作日(周一至周五),则打印出"今天是工作日";如果是周末(周六或周日),则打印出"今天是周末"。
① 创建一个新的Shell脚本文件,例如"check_weekday.sh"。
touch check_weekday.sh
② 在脚本文件中输入以下代码:
vim check_weekday.sh
#!/bin/bash
day=$(date +"%u")
if [ $day -le 5 ]; then
echo "今天是工作日"
else
echo "今天是周末"
Fi
③ 在命令行中进入保存脚本的文件夹,并给脚本文件添加可执行权限:
chmod +x check_weekday.sh
④ 运行脚本:
./check_weekday.sh
脚本将获取当前系统日期,并根据日期判断是工作日还是周末,并打印相应的结果。
尝试运行脚本,并根据实际日期观察输出结果是否符合预期。通过这个例子,可以验证上述代码片段的解释,并理解if/then/else结构在实际脚本中的应用。
(7)if/then/elif/then/else结构
if/then/else结构可以进一步扩展以测试多个条件:在满足某个条件时执行不同的操作集合。以下示例中显示了其结构:
if<CONDITION> ; then
<STATEMENT>
...
<STATEMENT>
elif<CONDITION>; then
<STATEMENT>
...
<STATEMENT>else
<STATEMENT>
...
<STATEMENT>
fi
这个代码片段是一个Shell脚本中的条件语句,使用了`if`/`elif`/`else`结构,它允许在多个条件情况下执行不同的操作。
- `<CONDITION>`: `<CONDITION>` 是一个表示要检查的条件的表达式。这可以是一个逻辑表达式、比较操作符或变量的状态。
- `then`: 当条件 `<CONDITION>` 为真时,`then` 之后的代码块将被执行。
- `<STATEMENT>`: `<STATEMENT>` 代表在条件为真时要执行的一条或多条语句。可以有任意数量的语句,并且每个语句应位于单独的行上。
- `elif`: 如果之前的条件 `<CONDITION>` 为假,则会检查下一个条件 `<CONDITION>`。如果 `<CONDITION>` 为真,`elif` 之后的代码块将被执行。
- `<STATEMENT>`: `<STATEMENT>` 代表在条件为真时要执行的一条或多条语句。与前面的 `<STATEMENT>` 类似,可以有任意数量的语句。
- `else`: 如果之前的所有条件都为假,则执行 `else` 后面的代码块。
- `<STATEMENT>`: `<STATEMENT>` 代表在所有条件都为假时要执行的一条或多条语句。与前面的 `<STATEMENT>` 类似,可以有任意数量的语句。
- `fi`: `fi` 是条件语句的结束标记,表示条件语句的结束。
代码将按顺序检查每个条件,一旦找到符合条件的情况,相应的代码块将被执行。如果所有条件都为假,`else` 后面的代码块将被执行。通过使用 `if`/`elif`/`else` 结构,可以根据多个条件情况执行不同的操作。
注意,可以根据需要添加多个 `elif` 代码块,并在 `else` 之后添加默认情况的代码块。这样可以处理更多的条件和操作。
例:
假设我们要编写一个脚本来根据用户输入的数字判断它是正数、负数还是零。
① 创建一个新的Shell脚本文件,例如"check_number.sh"。
touch check_number.sh
② 在脚本文件中输入以下代码:
vim check_number.sh
#!/bin/bash
read -p "请输入一个数字: " num
if [ $num -gt 0 ]; then
echo "这是一个正数"
elif [ $num -lt 0 ]; then
echo "这是一个负数"
else
echo "这是零"
fi
③ 在命令行中进入保存脚本的文件夹,并给脚本文件添加可执行权限:
chmod +x check_number.sh
④ 运行脚本:
./check_number.sh
脚本将提示您输入一个数字,并根据数字的正负与零进行相应的判断和输出。
尝试运行脚本,输入不同的数字,观察输出结果是否符合预期。通过这个例子,您可以验证`if`/`elif`/`else` 结构在实际脚本中的应用,以根据不同的条件情况执行不同的操作。
4.使用正则表达式匹配命令输出中的文本
(1) 编写简单的正则表达式
- 正则表达式是用于模式匹配和查找特定内容的机制,被广泛应用于文本处理工具和编程语言中。
- 常见工具如 vim、grep 和 less 命令都支持使用正则表达式进行文本搜索和处理。
- 编程语言如 Perl、Python 和 C 也都提供正则表达式用于模式匹配条件。
- 正则表达式是一种独立的语言,具有自己特定的语法和规则。
(2)描述简单的正则表达式
最为简单的正则表达式是完全匹配。如果正则表达式中的字符与正在搜索的数据中的类型和顺序均匹配,即为完全匹配。
例:
cat 与c加a加t(中间没有其他字符)完全匹配。
(3)匹配行首行尾
以上部分对文件使用了完全匹配正则表达式。请注意,无论正则表达式在行的哪个位置(行首、行中或行尾)执行操作,均会匹配搜索字符串。使用行定位符控制正则表达式在哪个位置上查找匹配项。
要在行首搜索,请使用脱字符号(}。要在行尾搜索,请使用美元符号($)。
在使用上述文件的情况下,^cat正则表达式将匹配两个词语。$cat正则表达式找不到任何匹配的词语。
例:
要想在文件中查找以dog为结尾的行,请使用该精确表达式和行尾定位符来创建正则表达式 dog$。将dog$应用到文件将会找到两个匹配项:
·
要查找一行中的唯一词语,请同时使用行首和行尾定位符。例如,要查找作为一行中唯一词语的cat,请使用^cat$。
(4)向正则表达式中添加通配符和倍数
正则表达式常用的一些概念:
①. 点号(.):点号用于匹配除换行符以外的任何单个字符。例如,正则表达式`c.t`将匹配包 含"c"、任意字符和"t"的字符串,如 "cat"、"concatenate"、"vindication"、"c5t" 和 "c$t"。
②. 字符集([]):字符集用于匹配方括号内的任何单个字符。例如,正则表达式`c[aou]t`将匹配以 "c" 开头,然后是 "a"、"o" 或 "u",最后是 "t"。
③. 星号(*):星号表示匹配前面表达式的零项或多项。例如,正则表达式`c[aou]*t`将匹配以 "c" 开头,后面跟着零个或多个 "a"、"o" 或 "u" 字符,最后以 "t" 结尾的数据。
④. 花括号({}):花括号用于指定前面字符的期望数量。例如,`c.\{21\}t` 表示匹配以 "c" 开头,后面是任意两个字符,然后重复 21 次,最后以 "t" 结尾的任何词语。
这些是正则表达式中常见的几种元字符和概念,可以帮助我们构建更具灵活性和精确性的模式匹配。
注意:
①由于正则表达式常含有shell元字符〈如$、*和),建议练习 使用单引号来括起正则表达式。这样可确保字符由命令解释,而不是由shell解释。
②不同的正则表达式引擎和工具可能存在细微的差异,具体的语法和用法可能有所不同。因此,请根据您所使用的实际工具和环境进行相应的调整。
正则表达式:
选项 |
描述 |
. |
句点(.)匹配任何单个字符。 |
? |
前面的项目是可选的,且最多匹配一次。 |
* |
前面的项目将匹配零次或多次。 |
+ |
前面的项目将匹配-一次或多次。 |
{n} |
前面的项目恰好匹配n次。 |
{n,} |
前面的项目匹配n次或更多次。 |
{,m} |
前面的项目最多匹配m次。 |
{n,m} |
前面的项目至少匹配n次,但不超过m次。 |
[:ainum:] |
字母数字字符: '[:alpha:]'和'[digit:]";在'℃'语言环境和ASCII字符编码中,它等同于‘[O-9A-Za-z]'。 |
[:alpha:] |
字母字符:'[:lower:]'和'Eupper:]";在'℃'语言环境和ASCI字符绵码中,它等同于'[A-Za-z]'。 |
[:blank:] |
空白字符:空格和制表符。 |
[:cntrl:] |
控制字符。在ASCI中,这些字符对应八进制代码000到037和177(DEL).在其他字符集中,它们为对等字符(如果有)。 |
[:digit:] |
数字:0123456789 |
[:graph:] |
图形字符: '[:alnum:]'和'[:punct:]'。 |
[:lower:] |
小写字母;在'℃'语言环境和ASCII字符编码中,它对应于a bcdefghijklmnopqrs tuvwxy Z. |
[:print:] |
可打印字符: "[:alnum:〕、'[:punct:]'和空格。 |
[:punct:] |
标点符号;在'"C"语言环境和ASCIl字符编码中,它对应于!"#$ 9%&"()*+ ,-. / : ;<=>?@[1]^_'{}~。在其他字符集中,它们为对等字符(如果有)。 |
[:space:] |
空格字符;在“C”语言环境中,它对应于制表符、换行符、垂直制表符、换页符、回车符和空格。 |
[:upper:] |
大写字母;在'C'语言环境和ASCII字符编码中,它对应于ABCDEFGH1JKLMNOPQRSTUv w XYZ。 |
[:xdigit:] |
十六进制数字:0123456789ABCDEFabcd e f。 |
\b |
匹配词语两侧的空字符串。 |
\B |
匹配词语中间的空字符串。 |
\< |
匹配词语开头的空字符串。 |
l> |
匹配词语末尾的空字符串。 |
\w |
匹配词语组分。"[_[:alnum:]J]'的同义词。 |
\W |
匹配非词语组分。'[^_[:alnum:]'的同义词。 |
\s |
匹配空格。'[[:space:]]'的同义词。 |
\S |
匹配非空格。'[A[:space:]]'的同义词。 |
(5)使用grep命令隔离数据
grep命令提供了一个正则表达式和一个文件〈该文件中应有此正则表达式的匹配项)。
通过竖线运算符,grep命令可与其他命令一起使用。例如:
(6)grep选项
grep命令具有许多有用的选项,用于调整grep 如何使用提供的正则表达式来处理数据。
常见的grep选项:
选项 | 功能 |
-i | 使用所提供的正则表达式,但不会强制区分大小写(运行不区分大小写的操作)。 |
- i | 仅显示不包含正则表达式匹配项的行。 |
-r | 将递归地匹配正则表达式的数据搜索应用到一组文件或目录中。 |
- A NUMBER | 显示正则表达式匹配项之后的行数。 |
- B NUMBER | 显示正则表达式匹配项之前的行数。 |
- e | 如果使用多个 -e选项,则可以提供多个正则表达式,并将与逻辑OR一起使用。 |
(7)grep示例
默认情况下,正则表达式会区分大小写。对 grep使用-i选项可以执行区分大小写的搜索。
如果您知道哪些内容不是自己要查找的,那么-v选项会非常有用。-v选项仅显示与正则表达式不匹配的行。
要查找不受命令行影响的文件,请使用-v选项。在以下示例中,正则表达式将会匹配所有以#或;开头的行(#和;是表示行将被解释为注释的典型字符)。然后,输出中将略去这些行。
对grep命令使用-e选项将允许您一次搜索多个正则表达式。要在用vim或1ess打开的文件中搜索文本,请使用斜杠字符(/)并输入要查找的模式。按Enter键开始搜索。按N查找下一个匹配项。
例:
假设我们有一个名为"example1.txt"的文本文件包含以下内容:
touch example1.txt
vim example1.txt
ABCDEFG
abcdefg
1234567
现在我们可以使用不同的grep选项来验证上述文字中grep不同选项的区别:
①. `-i` 选项:执行区分大小写的搜索。
grep -i "A" example1.txt
输出结果:
ABCDEFG
abcdefg
注意到 `-i` 选项忽略了大小写,所以"A"和"a"都被匹配到了。
②. `-v` 选项:仅显示与正则表达式不匹配的行。
grep -v "^A" example1.txt
输出结果:
abcdefg
1234567
这里的正则表达式 "^A" 匹配以 "A" 开头的行。 `-v` 选项使得只显示不匹配该正则表达式的行。
③. `-e` 选项:允许一次搜索多个正则表达式。
grep -e "A" -e "a" example1.txt
输出结果:
ABCDEFG
abcdefg
这里我们一次搜索了两个正则表达式 "A" 和 "a",并找到了匹配的行。
在 vim 或 less 中搜索文本,可以使用斜杠字符(/):
vim example1.txt
按下 "/" + 输入要查找的模式,并按下 Enter 键
或者
less example1.txt
按下 "/" + 输入要查找的模式,并按下 Enter 键
然后可以按 "n" 键来查找下一个匹配项。
四、总结
·如何创建和执行简单的Bash脚本。
·如何使用循环来迭代命令行和 shell脚本中的项目列表。
·如何使用正则表达式和grep搜索日志文件和配置文件中的文本。