Linux-gawk命令
Linux-gawk命令背景此前讲到sed命令,它是流编辑方式的一种,但是由于其自身的限制,导致其无法很好的组织文件中的数据。这一点就被gawk给解决了,gawk提供了类编程环境的方式去处理文本:支持变量、提供算数计算、结构化编程、数据提取,所以gawk要强大很多。
内容入门gawk命令的格式如下:
1234# options是gawk的参数# program是处理文本的指令# file是处理文本对象,如果不指定则从STDIN中获取gawk options program file
其中options部分常用的参数如下(摘录自《Linux命令行与Shell编程大全》):
123456# -F fs:指定行中划分数据字段的字段分隔符# -f file:从指定的文件中读取数据# -v var=value:定义gawk程序中的一个变量及默认值# -mf N:指定要处理的数据文件中的最大字段数# -mr N:指定数据文件中的最大数据行数# -W keyword:指定gawk的兼容模式或警告等级
program是处理文本的指令,首先讲到打印命令print:
12# 它会在STDOUT中输出对 ...
Linux-正则表达式
Linux-正则表达式背景处理文本内容的一大利器就是利用正则表达式,这点在vim、sed、gawk、egrep命令中都是非常重要的知识点,但是不同语言下的正则表达式引擎不同。Linux下有两种引擎的正则表达式:POSIX基础正则表达式引擎(BRE)、POSIX拓展正则表达式引擎(ERE)。其中Sed命令默认用的BRE中的一部分,而gawk命令用的是ERE,所以Sed使用的时候会有所限制,而gawk就没有太多的限制,可以直接使用。
就本文而言,BRE和ERE的差别体现在如下标识字符中:?、+、{}、(),这些字符在gawk中直接使用,而在sed中就需要借助其它:\,或者指定参数-r。
内容首先看表示字符的元字符:.,它表示任意一个字符;以及表示字符组的符号:[]
1234echo "shuai" | sed -n -e '/.i/p'# [abc]: 表示去abc中任意一个字符echo "shuai" | sed -n -e '/[auv]i/p'
然而上面取区间的表述方式对连续区间的取 ...
Linux-Sed命令
Linux-Sed命令背景之前讲到文本编辑的时候,讲到Vim编辑器,在shell命令行下有很多类编辑器,比如:vi、emacs、vim、nano等,它们作为一个独立的软件包,对我们还是很友好的,但是当我们需要对文本进行自动化处理的时候,它们就无法很好的使用了,因此就引入了流编辑器的概念,其中之一便是sed命令
内容入门作为流编辑器,它有如下几个特点:
每次从输入中读取一行
根据提供的编辑器命令匹配数据,并根据命令修改流中的数据
将新的数据输出到STDOUT中,而不是回写至文件中,除非人为设定
它的格式如下:
1234# option:指定参数# script:操作文本的指令,可以称之为替换标记,和-e、-f参数搭配使用# file:待处理的文本文件sed option script file
比如:
12345678910# 如果有多个命令,则之间用;隔开sed -e "s/shuai/baqi/;s/devin/shuai" file# 也可以指定多个-esed -e "s/shuai/baqi/“ -e "s/devin/shuai&q ...
Linux-Shell函数和图形菜单
Linux-Shell函数和图形菜单背景此前讲述的都是单一脚本运行所有的命令,其中不乏一些重复的代码,如果是少量的都还好,但是一旦面对大批量重复的代码时就会显得很啰嗦,所以此处就讲到在Linux中使用Shell函数,从而降低重复代码的编写工作。
同样,为了便于更加友好的使用Shell脚本,还可以创建图形菜单,本文也对该内容进行了简要描述。
全文笔记来源于《Linux命令行与Shell编程大全》
内容Shell函数与其它语言类似,在shell中也可以编写函数,它的定义方式如下:
123456789# 方式1:借助关键字funcationfuncation name { commands}# 方式2:直接定义name() { commands}
比如:
12345678funcation print { echo "who you are"}# 也可以print() { echo "who you are"}
当我们需要调用函数的时候,则直接写 ...
Linux-数据和信号
Linux-数据展示和信号背景在shell中,数据的展示方式有两种,一种是在终端上,还有一种是记录在文件中,这些在Linux中都是借助标准文件描述符实现,本文会对这些标准文件描述符做简要记录。同时在Linux中,是通过信号与进程中运行的程序进行交互,本文也会对此做简要记述。全文参考《Linux命令行与Shell编程大全》
内容数据展示在shell中文件描述符是一个非负数整数,并且在一个进程中最多可以有9个文件描述符,分别对应于:0~8,但是由于一些原因,在bash shell中保留了前三个文件描述符:0、1、2,分别对应于:标准输入(STDIN)、标准输出(STDOUT)、标准错误输出(STDERR)。
STDIN可以理解为我们常见的shell输入,比如我们直接在shell终端输入,或者通过文件读取。STDOUT可以理解为shell命令的输出,STDERR可以理解为命令运行报错时的输出,STDOUT和STDERR都是一样的输出,但是在Linux中,将其区分开对待。
对于STDIN,默认情况下是通过终端进行输入,但是也可以通过<、<<进行修改,比如:
12345# 则c ...
Linux-Shell交互
Linux-Shell交互背景此前讲述的一直都是Shell脚本中的内容,并没有涉及到脚本与人之间的交互,本文主要对Shell交互部分的内容做了一些笔记,内容参考于《Linux命令行与Shell编程大全》
内容命令行传参在shell中,如果需要向脚本中传递参数,有两种方式,一种是通过脚本运行期间的交互进行输入,还有一种是直接在启动脚本时就将对应的参数就传递给脚本,先对第二种方案进行描述,其传递的格式如下:
12# var表示传递的参数./run.sh var1 var2 var3 ...
此时,对于run.sh脚本而言,它会接受到命令行传递的参数,并且将其依次记录在变量:$1 ~ $9中,当然,如果传递的参数超过了9个,则可以通过${10}的方式再次获取传递的其他参数,譬如:
12total=$[ $1 * ${11} ]echo "the result is $total"
不过,如果传递的参数内容中有空格,则需要用单引号/双引号对其进行包裹,否则shell会将其解读为多个参数。比如:
1./run.sh "sh ...
Linux-Shell循环
Linux-Shell循环背景之前在《Linux-shell与环境变量》中,讲述了条件判断语句,那么还缺少循环结构,本文就对shell中的循环结构做简要描述。笔记源自于《Linux命令行与shell编程基础》
内容for循环条件判断固然解决了多情况下难以统一解决方案的问题,但是对于重复劳作的问题却还没有解决,所以shell中还有循环结构的命令:for、while、until。针对for命令的结构如下:
1234for var in listdo commandsdone
for循环中的list说是一个列表,既可以是列表变量,也可以是直接的列表内容,但本质上就是一个字符串,比如:
12345# 直接将列表的值写在了in后面for i in alabama alaska linux shell wahahado echo "the var is $i"done
同样可以借助于变量
12345678# 请注意,for默认使用空格、换行符、制表符作为列表元素的间隔符var="alabama alaska linux shell wahaha&quo ...
Linux常见问题汇总
Linux常见问题汇总背景在Ubuntu的操作环境下,有时会遇到一些自己从不知晓的问题,但是它们的知识又是很零碎,所以本文主要对这些内容进行汇总,做简要记录
内容
网络切换导致的Vmware虚拟机无法更新Ubuntu源
报错提示执行sudo apt update更新依赖源信息的时候,提示如下:
123wudashuai@localhost: sudo apt updateReading package lists... DoneE: Failed to fetch http://mirrors.aliyun.com/ubuntu/dists/focal-updates/universe/dep11/Components-amd64.yml.xz File has unexpected size (204668 != 204828). Mirror sync in progress? [IP: 116.207.100.226 80]
解决方案思路:重启网卡、重启机器
方式:
重启网卡
123# 重启单个网卡ifconfig版sudo ifconfig eth0 downsudo i ...
Linux-Shell脚本基础
Linux-Shell脚本基础背景此前讲述的都是基于命令行的Linux命令,其实那些都是非常常用的,也是基础中的基础。本文基于之前的内容,讲述关于shell编程的一些语言基础和相关的结构化命令,如:条件判断、循环。
内容脚本基础之前我们讲,通过;可以在一行之中同时编辑多条命令运行,并且通过()可以将多条命令整合成一条命令运行起来,那么在shell脚本中如何运行多条命令呢?如下:
123#!/bin/bashwhowhoami
在shell中,#起注释作用,除了首行以外,首行的#!/bin/bash表示运行该脚本所使用的程序。编写完成以后,如果你直接运行该文件(run.sh),则会提示command not found,这个是因为我们没有将shell脚本所在的路径纳入到PATH搜索环境中。解决方案如下:
1PATH=$PATH:$(pwd)
或者,如果不想修改PATH的搜索路径,则通过指定脚本具体的路径来运行
1./run.sh
但是这么运行的话,会提示Permission denied,这是因为该文件没有可执行权限,所以需要追加执行权限
1chmod u+x run.sh
在s ...
Linux-软件包安装
Linux-软件包安装背景全文针对Linux系统下软件包的更新、安装、升级做简要叙述。本文环境是Ubuntu 20.10,它基于dpkg,如果使用的是CentOS,则不适用。
内容在Linux系统中,当我们想要查看某一个软件的相关信息,则可以通过apt命令:
12345678910111213141516171819202122apt show [包名]# 执行后,可获得如下结果:Package: vimVersion: 2:8.1.2269-1ubuntu5Priority: optionalSection: editorsOrigin: UbuntuMaintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>Original-Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>Bugs: https://bugs.launchpad.net/ubuntu/+filebugIn ...