微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

其他文本处理命令以及bash变量中的一些字符串的处理方法

其他的文本处理命令:

1.wc

2.cut命令:

cut - 在文件的每一行中提取片断

注意:能够被cut修剪的文件或数据内容,一般是具有某种特定格式或结构的文本文件或数据内容

如 :/etc/passwd

格式:cut [OPTION]... [FILE]...


常用选项:

-d,--delimiter=DELIM:指定在实施修剪操作时所使用的字段分隔符号,认是TAB(空白字符);

-f,--fields=LIST:根据指定的字段分隔符号来指定要保留的字段编号列表;

LIST可以称为字段列表,地址定界,书写方法

1.NUM:选择被指定的单个数字所表示的字段,该字段将被保留;

2.NUM1,NUM2,NUM3,……:离散的多个被指定的字段的数字的列表;所有数值所代表的字段均被保留;

3.NUM1-NUM2:连续的多个被指定的字段的数字列表,所有数值所代表的字段均被保留;

NUM1-:从NUM1开始直到行尾的所有字段;

-NUM2:从行首第一个字节开始直到NUM2的所有字节

--output-delimiter=STRING:指定输出数据时的字段分隔符号;

例:取出用户名,UID,以及认的shell

[root@localhost ~]# cut -d ":" -f 1,3,7 --output-delimiter=" " /etc/passwd

对于某些特定格式的数据进行剪切提取,并以规范的格式输出也可以用下一个awk命令

[root@localhost ~]# df | tr -s ' ' '\t' | cut -f 3,5


3.awk:

gawk - pattern scanning and processing language


常用选项:

-F fs,--field-separator fs:指定字段分隔符,认空白字符;


对于awk,根据字符分隔符切分出来的各字段,分别使用$1,$2,$3,……$NF来进行标识:$1,$3……$NF是awk的内部变量;


awk|gawk [Options] ...'/PATTERN/{print $1,$2}'

例:[root@localhost ~]# df | awk '{print $3,$5}' |tr ' ' '\t'

已用 已用%

3696340 8%

0 0%

88 1%

9140 1%

0 0%

154172 77%

16 1%

8086368 100%



4.sort:

sort - sort lines of text files

对于指定文件中的行按照ASCII编码表中的字符顺序进行排序输出

格式:sort [OPTION]... [FILE]...


常用选项:

-n:以数字的数值大小为排序依据进行排序;

-r:倒序显示排序结果;

-R:随机排序:只是此随机排序算法非常简陋,不太适用于复杂环境中的排序要求;

-u, --unique:重复出现的行,只出现一次,去重;连续且相同的行称为重复行;

-t,--field-separator=SRP:指定字段分隔符;

-k:指定根据哪个关键字字段进行排序,一般和-t同时使用;

随机选取用户:[root@localhost ~]# sort -R /etc/passwd | head -1

halt:x:7:0:halt:/sbin:/sbin/halt


5.uniq

uniq - 删除排序文件中的重复行

注意:uniq命令本身不具备排序的功能

格式:uniq [OPTION]... [INPUT [OUTPUT]]


常用选项:

-c,--count:对于重复的行计算重复次数;(常用于统计日志文件)

-d,--repeated:只显示重复的行,且每个重复行只显示一个作为代表;

-u,--unique:只显示无重复行;


6.diff

diff - compare files line by line 对两个文件内容进行逐行比较

格式:diff [OPTION]...FILE


制作patch文件

# diff file1 file2 > patch_file

注意:patch_file中记录的是file2的内容和file1文件相比有哪些不同;使用patch_file时,应该向file1打补丁;


7.patch:

patch - apply a diff file to an original

格式:patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]


常用选项:

-i patchfile or --input=patchfile:用于指明patch文件的路径;


条件测试命令:

test命令 == [命令,bash的内建命令;

格式:

test expression

[ expression ]

[[:bash的关键字,一般仅用于某些特定结构或这种格式之中;

[[ expression ]]


注意:此类条件测试命令,一般没有执行结果,仅有执行状态返回值,如果其执行状态返回值为0则表示true,如果其执行状态返回值为1,则表示false;


条件测试命令共有三类条件测试表达式:


1.数值测试:双目操作;

测试操作符:

-eq:测试两个数值是否相等;相等为真,不等为假;

-ne:测试两个数值是否不等;相等为假,不等为真;

-lt:小于,测试左边的数值是否小于右边的数值;小于为真,不小于为假;

-gt:大于,测试左边数值是否大于右边数值;大于为真,不大于为假;

-le:小于等于,测试左边的数值是否不大于右边数值;如果不大于为真,大于为假;

-ge:大于等于,测试左边的数值是否不小于右边数值;如果不小于为真,小于为假;


注意:bash仅支持整数,不支持浮点数;


2.字符串测试:

双目测试:

==|=:测试两个字符串是否为相同的字符串;相同为真,不同为假;

!=:测试两个字符串是否不相同;不同为真,相同为假;

>:测试左边的字符串所对应的ASCII编码是否比右边的字符串ASCII编码大;大于为真,小于为假;

<:测试左边的字符串所对应的ASCII编码是否比右边的字符串ASCII编码小;小于为真,大于为假;

STRING=~PATTERN:测试左侧的字符串STRING能否被右边的模式PATTERN匹配;能匹配为真,不能为假;


注意:>,<,=~这三类测试操作符只能用在[[expression]]测试语句中使用

[root@localhost ~]# [ a == a ]

[root@localhost ~]# echo $?

0

[root@localhost ~]# [ a == b ]

[root@localhost ~]# echo $?

1



单目测试

-z'STRING':测试STRING是否为空字符串,空为真,不空为假;

[root@localhost ~]# [ -z $MYVAR ]

[root@localhost ~]# echo $?

0

-n'STRING':测试STRING是否为非空字符串,不空为真,空为假;

[root@localhost ~]# [ -n $MYVAR ]

[root@localhost ~]# echo $?

0

注意:

1】通常情况下,字符串是要用引号引用的,单引号或双引号都可以,只有在特定的情况下,只能选择单引号或双引号之一;

2】[]和[[]]在某些情况下,意义不完全相同,要区分对待;

3】如果使用[]或[[]]进行条件判断,在表达式的两端都有留空白字符,以区分命令和参数之间的关系;

4】所有的双目测试操作符和参数之间也要留有空白字符空间;


3.文件测试:

单目测试:

-a|-e FILE:测试文件是否存在,存在为真,不存在为假;

-b FILE:测试文件是否存在且为块设备文件,存在且为块设备为真,否则为假;

-c FILE:测试文件是否存在且为字符设备文件,存在且为字符设备为真,否则为假;

-d FILE:测试文件是否存在且为目录文件,存在且为目录文件为真,否则为假;

-f FILE:测试文件是否存在且为普通文件,存在且为普通文件为真,否则为假;

-h|-l FILE:测试文件是否存在且为符号链接文件,存在且为符号链接文件为真,否则为假;

-s FILE:测试文件是否存在且其大小要大于零,存在且大小大于0为真,否则为假;

-S FILE:测试文件是否存在且为套接文件,存在且为套接字为真,否则为假;

-t FD:测试文件描述符是否在终端上被打开,被打开为真,否则为假;

-r FILE:测试文件是否存在且当前用户是否被授予读权限,存在且授权为真,否则为假;

-w FILE:测试文件是否存在且当前用户是否被授予写权限,存在且授权为真,否则为假;

-x FILE:测试文件是否存在且当前用户是否被授予执行或搜索权限,存在且授权为真,否则为假;


文件特殊权限标识测试:

-u FILE:测试文件是否存在且设置了SUID,存在且授权为真否则为假;

-g FILE:测试文件是否存在且设置了sgiD,存在且授权为真否则为假;

-k FILE:测试文件是否存在且设置了STICKY,存在且授权为真否则为假;


文件的所有权测试:

-O FILE:测试文件是否存在且其属主为当前有效用户;存在且属主为当前有效用户为真,否则为假

-G FILE:测试文件是否存在且其属组是否为当前有效用户的所在组;存在且属组为当前有效用户的所在组为真,否则为假;


双目测试:

FILE1 -ef FILE2:测试两个文件是否拥有相同的Inode标号:即:两个文件是否为硬链接


测试语句中添加逻辑运算符号:

1.利用bash的逻辑运算符号:

[ expression1 ] && [ expression2 ]

[ expression1 ] || [ expression2 ]

![ expression ]

2.利用条件测试本身的逻辑运算符号:

[ expression1 -a expression2 ]

[ expression1 -o expression2 ]


命令的执行结果:

1.命令的正常输出结果;

2.命令的执行状态返回值;

0-255

0:标识命令成功执行或者条件判断为真;

1-255:表示命令执行失败或者条件判断为假;

1,2,127:系统认保留的;

3-126,128-255:用户自定义命令执行状态返回值;


exit命令:

exit - exit the shell

格式:exit [n]

退出shell时可以使用n作为状态返回值;如果没有指定n,则认的状态返回值为最后一条命令的状态返回值;


注意:

当shell脚本运行时一旦遇到exit命令将立即结束运行此脚本的shell进程,同时次脚本的运行也会停止,其后续的所有命令不会再被解释执行,因此包含了exit命令的脚本,不要使用source命令来执行;


bash的颜色显示规则:

调用了ASCII编码对于颜色的设置方案‘


Ctrl键:\033

[:控制字符和颜色代码间的分隔符;

所有的颜色代码都应该使用m结尾;


颜色代码

0:关闭颜色显示属性,恢复为黑白色;

1:加粗子显示文本字符;

4:为文本字符添加下划线标识;

5:使文本字符闪烁;

7:将文本字符的背景颜色和前景颜色交换;

8:将文本字符的背景颜色设置为与前景颜色相同;


30-39:设置文本字符的前景色,38,39为保留,未被使用;

40-49:设置文本字符的背景色,48,49为保留,暂时未使用;


注意:此类控制字符和颜色代码必须放置在echo -e 模式中显示


程序的组成部分:

一个完整的应用程序,一般包括四类文件

二进制文件

文件和库文件

帮助文件

配置文件


bash——CLI中的一种:


bash同样属于完整的应用程序,上述四类文件,bash都有;

二进制文件:/bin/bash

文件和库文件:/lib64/

帮助文件: /usr/share/man/man1/bash.a.gz

配置文件

三类:

1.profile类:

为交互式登录的shell进程实现功能初始化的配置文件

2.bashrc类:

为非交互式登录的shell进程实现功能启动配置的配置文件

3.logout

为交互式登录的shell进程提供终止及清理类功能配置文件


bash的类型:

1.交互式登录的bash

1)直接通过某个终端输入账户信息和密码之后打开的bash进程;

2)su - | -l USERNAME执行切换登录大开的bash进程;


配置文件的加载顺序:

/etc/profile --> /etc/profile.d/*.sh -->~/.bash_profile --> ~/.bashrc --> /etc/bashrc


2.非交互式登录的bash

1)在图形界面下,通过菜单项或右键菜单打开的终端所启动的bash进程;

2)使用su USERNAME执行切换登录打开的bash进程;


配置文件的加载顺序:

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

bash的配置文件

1.profile类:

全局配置文件

/etc/profile

/etc/profile.d/*.sh


注意:在RHEL或CentOS系列的发行版操作系统中,通常会存在这样的情况;如果一个配置文件内容很多,格式很复杂,将会尝试将此配置文件切割拆分为多个片段配置文件,往往把最核心最主要的主配置文件中,将一些附属的或者扩展的配置内容分散存放在各个片段配置文件中;而被切分出来的片段配置文件一般会统一保存在“程序名称.d”命名格式的目录中;而我们约定,在这类目录中保存的片段配置文件的后缀名称会是统一的字符串;


个人配置文件

~/.bash_profile


profile类配置文件的作用:

1.用于定义用户的环境变量;

2.用于运行脚本或者执行命令;


2.bashrc类:

全局配置文件

/etc/bashrc


个人配置文件

~/.bashrc


bashrc类配置文件的作用:

1.用于定义本地变量

2.定义命令别名

3.用于定义umask


注意:只有root用户才能修改全局类的bash配置文件,普通用户只能修该其家目录中属于其个人的配置文件


为什么要为bash使用配置文件

所有利用bash命令行完成的命令行完成的命令操作,只要没有涉及到文件修改的,一般都只是针对当前的shell生效,一旦shell进程结束,则此前所有的操作的生命周期就咋偶到尽头,即配置失效;


配置文件的作用:

1.能够使用户赖以生存的配置信息长期有效;

2.能够让用户保存此前的配置内容


配置文件中新进修改内容生效:

1.注销重新登录,打开新的shell进程;

2.source命令;

3.exec命令;


3.logout类:

个人配置文件

~/bash_logout


作用:在关闭shell进程之前,清除某些用户自定义的配置,删除某些临时文件或目录,以及撤销用户此前定义的变量,清理某些可能会引发安安全问题的隐患等操作;


bash的变量中存放的字符串的处理方式:

bash变量:

弱变量:

1.无需事先定义即可应用;

2.变量没有数据类型的硬性要求认是字符型;


1.字符串切片:

${#VAR}:返回字符类型变量的变量值的长度;

${VAR:offset}:返回字符型变量中第“offset”位置之后的内容包括第“offset”位置的字符;offset取值范围为:0-$[${#VAR}-1]

${VAR:offset:number}:返回字符型变量中从第offset个字符后长度为number的字符部分;

${VAR -length}:取字符型变量字符串最右侧的“length”个字符


注意:在“-length”之前要留有空格;


2.基于模式(PATTERN)取字符串

${VAR#*PATTERN}:自左而右查找VAR变量中所存储的字符串中,第一次被PATTERN匹配到的字符,删除从字符串开始到第一个被PATTERN匹配的字符之间的所有字符;

${VAR##*PATTERN}:自左而右查找VAR变量中所存储的字符串中,所有被PATTERN匹配到的字符,删除从字符串开始到最后一次被PATTERN匹配的字符之间的所有字符;

${VAR%PATTERN*}:自右向左去查找VAR变量所存储的字符串中,第一次被PATTERN匹配到的字符,删除从字符串结尾到第一个PATTERN匹配到的字符之间的所有字符;

${VAR%%PATTERN*}:自右向左去查找VAR变量所存储的字符串中,所有被PATTERN匹配到的字符,删除从字符串结尾到最后一个PATTERN匹配到的字符之间的所有字符;


3.查找替换:

${VAR/PATTERN/SUBSTRING}:在VAR变量中,查找能够被PATTERN匹配到的内容,将其中第一个匹配到的结果PATTERN替换为SUBSTRING;

${VAR//PATTERN/SUBSTRING}:在VAR变量中,查找能够被PATTERN匹配到的内容,将所有匹配到的结果PATTERN替换为SUBSTRING;

${VAR/#PATTERN/SUBSTRING}:在VAR变量中查找行首匹配PATTERN的内容,将匹配的内容更换成SUBSTRING;

${VAR/%PATTERN/SUBSTRING}:在VAR变量中查找行尾匹配PATTERN的内容,将匹配的内容更换成SUBSTRING;


4.查找删除

${VAR/PATTERN}:在VAR变量中,查找能够被PATTERN匹配到的内容,将其中第一个匹配到的结果PATTERN删除

${VAR/PATTERN}:在VAR变量中,查找能够被PATTERN匹配到的内容,将所有匹配到的结果PATTERN删除

${VAR/#PATTERN}:在VAR变量中查找行首匹配PATTERN的内容,将匹配的内容删除

${VAR/%PATTERN}:在VAR变量中查找行尾匹配PATTERN的内容,将匹配的内容删除


5.字符串的大小写转换:

${VAR^^}:将变量中的小写字母转换为大写字母;

${VAR,}:将变量中的大写字母转换为小写字母:


6.变量赋值操作:

${VAR:-value}:如果VAR变量为空值或者变量为被定义,那么就直接返回value中的值;否则就返回VAR的值;

${VAR:+value}:如果VAR已被定义且不为空,则返回value的值;

${VAR:=value}:如果VAR变量为空值或者未被定义,那么直接返回value中的值并且将vvalue的值赋给变量VAR;否则返回变量VAR的值;


7.变量的间接引用:

如果第一变量的值恰好是第二个变量名,那么从第一变量引用第二个变量而方法,就称为变量的间接引用,也称为间接变量引用;

如:VAR1=VAR2,VAR2=HELLO6


bash提供了这样的间接变量引用的的方法

eval MYVAR= \$$VAR1

原文地址:https://www.jb51.cc/bash/389553.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐