4.5k 4 分钟

# 多行命令 n 命令 -- next ,会将 sed 编辑器移动到数据流中的下一行文本,而不用重新回到命令的最开始执行 sed '/head/{n;d}' data# 当匹配到 head 一行,sed 会马上移动到下一行开头,执行 d 命令N 命令,将数据流中两个文本行合并到同一个模式空间中,两行文本仍以换行符相隔,但是会将两行文本当作一行处理。 cyan@cyan-virtual-machine:~/Templates$ cat datacatcatcatendcyan@cyan-virtual-machine:~/Templates$...
2.5k 2 分钟

# 简介 本文不会为你介绍所有正则表达式规则,一是我比较懒,二是你记不住。还不如上网去查。 # 定义 关于正则表达式与数据之间的关系,你可以这么理解 数据 --> 正则表达式 --> 匹配的数据 | v 滤掉的数据 自定义的模式模板 (pattern template), Linux 工具 (sed,gawk) 用来过滤文本。 正则表达式是通过正则表达式引擎 ( regular expression engine ) 实现的,该引擎是一套底层软件,负责解释正则表达式并使用这些模式进行文本匹配。 在 Linux 中,存在两种流行的正则表达式引擎: POSIX...
1.6k 1 分钟

# 简介 gawk 程序是 Unix 中原始 gawk 程序的 GNU 版本,让流编辑迈上了一个新的台阶,其作用为: 定义变量保存数据。 使用算数和字符串操作符处理数据。 使用结构化编程概念来为数据处理增加处理逻辑。 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告 格式: gawk options program file 。 gawk 强大之处在于程序脚本,可以写脚本来读取文本行的数据,处理并显示数据,创建任何类型的输出报告。 如果你没有下载 gwak ,执行命令: sudo apt install gawk 。 # 从命令行读取脚本程序 gawk...
3.2k 3 分钟

# 简介 sed 编辑器被称作流编辑器 ( stream editor ),流编辑器会在编辑器处理数据之前基于预先提供的一组数据规则来编辑数据流。根据命令来处理数据,这些命令要么从命令行输入,要么存储在一个命令文本文件中。 sed 编辑器处理事务: 一次从输入中读取一行数据。 根据提供的编辑器命令匹配数据。 按照命令修改流中的数据。 将新的数据输出到 STDOUT 。 sed 将所有命令与一行数据匹配完毕后,读取下一行数据并重复该过程,处理完所有数据,终止。 # 基本格式 格式: sed options script file 。 为了更好理解,举个例子。 先创建一个数据文件 data...
2.2k 2 分钟

# 创建函数 格式 # 格式 1function name { commands}# 格式 2, 更推荐使用name() { commands}# 使用时只需要使用函数名即可 --name默认情况下,函数退出状态码是函数中最后一条命令返回的退出状态码,函数执行结束后,可以用标准变量 $? 来确定函数退出状态码。 # return 语句fun() { read -p "please input the value:" value return $value}退出状态码在...
1.1k 1 分钟

# 信号 Linux 利用信号与运行在系统中的进程进行通信,常见的 Linux 系统信号: 1-- SIGHUP -- 挂起进程 2-- SIGINT -- 终止进程 3-- SIGQUIT -- 停止进程 9-- SIGLIKILL -- 无条件终止进程 15-- SIHTERM -- 尽可能终止进程 17-- SIGSTOP -- 无条件停止进程,但不是终止 18-- SIGTSTP -- 停止或暂停进程,但不是终止 19-- SIGCONT -- 继续运行停止的进程 crtl+c 会生成 SIGINT 信号,停止 shell 当前运行的所有进程。 ctrl+z 会生成 SIGTSTP...
5.6k 5 分钟

# 简介 之前关于标准输入,输出重定向的文章,我提到开始接触流,并且在文中讲解时使用也是以流来具体化重定向的作用,但是讲解的非常不严谨。本文相当于对重定向深入讲解,甚至可以自定义重定向。 # 标准文件描述符 Linux 系统将每个对象当作文件处理(有句话就是一切皆文件),包括输入和输出,用文件描述符标识每个文件对象。文件描述符是一个非负整数,可以唯一表示会话中打开的文件。出于特殊目的, bash shell 在每个进程,只保留了 3 个文件标识符 (0,1,2) STDIN -- 标准输入。对于终端界面,标准输入是键盘。 shell 从 STDIN 对应的键盘获得输入。使用输入重定向符号...
4k 4 分钟

# 简介 我们之前只是讲了脚本如何输出,也就是 echo ,本文会讲解脚本如何处理用户的输入。同时我们会涉及到另外一些变量的讲解。 # 位置参数 我们之前使用过许多命令,他们有些可以接收若干个参数,这其实是通过位置参数来实现的。 $0 是程序名, $1~$9 是第 1~9 个参数,超过 9 时,就要使用 ${} ,比如 ${10} ,这样,就允许在运行时加入任意个参数。 cyan@cyan-virtual-machine:~/Templates$ cat tmp.txt#/bin/bashecho $0echo...
4.2k 4 分钟

# 数学运算 在脚本中进行数学运算有很多种方式,你可以从下面选几种喜欢的 exper 命令,支持基本的(逻辑、比较)运算符,对于有歧义的符号 (如 * ),需要用 \* ,传送门。 # expr 表达式expr length “this is a test” #计算字串长度expr 14 % 9 #整数运算expr 2 \* 10 #注意。参数和符号之间必须要有空格 $[表达式] ,更加方便,符号不会出现歧义,但是只能整数运算。 var1=$[1+5] bc 计算器,实际上是一种编程语言, -q 可以不显示 bash 计算器冗长的欢迎信息。浮点运算是由内建变量 scale...
3k 3 分钟

# 简介 之前在 shell 快速入门中已经讲了如何构建一个脚本,我们回顾一下: 第一行要指定 shell 类型 #!/bin/bash 。 完成基本的脚本构建后,增加执行权限 chmod u+x 文件名(u是属主) 。 要取消 echo 的换行,就要使用 -n 参数 echo -n "abcd" 。 使用美元符号 $ 来引用变量,如果想单纯使用这个符号,要加上转义符 \$ 。 在脚本中自行设置变量时,= 之间不能有空格,不然 shell 会认为是命令而不是变量 var=100 。 本文会接着介绍其他与脚本编程相关的知识。 # 命令替换 shell...