其他文本处理命令以及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

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

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

[[email protected] ~]# 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,$2,$3……$NF是awk的内部变量;

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

例:[[email protected] ~]# 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同时使用;

随机选取用户:[[email protected] ~]# 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]]测试语句中使用

[[email protected] ~]# [ a == a ]

[[email protected] ~]# echo $?

0

[[email protected] ~]# [ a == b ]

[[email protected] ~]# echo $?

1

单目测试

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

[[email protected] ~]# [ -z $MYVAR ]

[[email protected] ~]# echo $?

0

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

[[email protected] ~]# [ -n $MYVAR ]

[[email protected] ~]# 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

时间: 2024-11-03 21:20:11

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

#8 bash变量中的字符串处理

一个完整的程序,一般包括4类文件: 二进制文件(可执行文件).头和库文件.帮助文件.配置文件: bash--CLI(命令行接口)的一种 bash同样属于完整的应用程序,也有这四类文件: bash的配置文件: 三类: profile类: 为交互式登录的shell进程实现功能初始化的配置文件: bashrc类: 为非交互式登录的shell进程实现功能启动配置的配置文件: logout类: 为交互式登录的shell进程提供终止及清理类功能的配置文件: shell的类型: 交互式登录的shell: 1.

两个变量中的值进行互换的方法

在软件开发的过程中,经常会将两个变量中的值进行互换.那么两个变量中的值进行互换的方法有几种呢? 常见的两个变量中的值互换的方法有三种,下面将进行一一介绍,当是一个总结. 第一种方法: int a = 3, b = 4; int tmp; tmp = a; a   = b; b   = tmp; 这种方法的优点是:代码可读性强,容易理解. 缺点是:使用第三方变量,浪费内存: 第二种方法: int a = 3, b = 4; a = a + b;   b = a - b;    a = a - b;

java中常用的字符串的截取方法

java中常用的字符串的截取方法   1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.length(); 2.charAt() 截取一个字符 例:char ch; ch="abc".charAt(1); 返回'b' 3.getChars() 截取多个字符 void getChars(int sourceStart,int sourceEnd,char target

bash变量中字符串的操作

1.字符串的切片 ${#VAR}:返回字符类型变量的变量值的长度 ${VAR:offset}:返回字符型变量中第"offset"位置之后的内容,不包括第offset位,offset取值范围为:0-$[$[#VAR]-1] ${VAR:offset:number}:返回字符型变量中第"offset"个字符后开始长度为number的字符部分 ${VAR: -lenth}:取字符型变量字符串最右侧的"length"个字符(注意空格) 示例: 2.基于模

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

bash变量: 弱变量: 1.无需实现定义即可应用: 2.变量没有数据类型的硬性要求,默认是字符型: 1.字符串切片: ${#VAR}:返回字符型变量的变量值长度: ${VAR:offset}:返回字符型变量中第"offset"位置之后的内容,不包括第"offset"位置的字符: offset取值范围:0-$[${#VAR-1}] ${VAR:offset:number}:返回字符型变量中从第"offset"个字符后开始长度为"numb

JavaScript中的String字符串对象的方法总结:

温故而知新,可以为师矣.字符串对象看下面的方法即可. 1:string.charAt(index)方法:返回该字符串索引的字符. 1 'hello'.charAt(1); 2 "e" 2:string.charCodeAt(index)方法:返回该字符串索引的字符的ASCII码. 1 'a'.charCodeAt(0); 2 97 3:string.indexOf方法确定一个字符串在另一个字符串中的位置(数字型),如果返回-1,就表示不匹配,indexOf从字符串头部开始匹配 1 'h

Java中utf-8格式字符串的存储方法。

知识点:可通过 byte[] bytes="xxxx".getBytes("utf-8")得到字符串通过utf-8解析到字节数组.utf-8编码格式下,计算机采用1个字节存储ASCII范围内的字符,采用3个字节储存中文字符. UTF-8是一种变长字节编码方式.对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0:如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头.UTF-8最多可用到6个字节.

js中数字转换为字符串 几种方法

a. 要把一个数字转换为字符串,只要给它添加一个空的字符串即可: var n = 100; var n_as_string = n + ""; b. 要让数字更加显式地转换为字符串,可以使用String()函数:  var string_value = String(number); c. 使用toString()方法:  string_value = number.toString(); Number对象的(基本的数字转换为Number对象,以便可以调用这个方法)toString()

shell之sed命令删除变量中带有“日期时间等内容”的方法

sed命令删除指定等内容可能大家都知道,比如想要删除某个文件中包含"badboy"的那行,直接使用下面的命令就可以: sed -i '/badboy/d' file.txt 就可以把flie.txt文件中包含badboy的内容全部删掉. sed命令删除指定行,如果匹配字符用变量替代,变量中包含"/"符号,使用下面方法处理: 例如: [[email protected]]# vi a.txt /usr/sbin/restart.sh /usr/sbin/control