5、文本处理命令


文本处理命令

文本处理命令 1

1. 字符串截取和替换命令 2

1.1. printf格式化输出 2

1.2. 文本三剑客 4

1.3. 所有文本处理大总结 42

字符串截取和替换命令

printf格式化输出

printf '输出类型输出格式' 输出内容

5、文本处理命令

5、文本处理命令

5、文本处理命令

由此可以,printf是一个格式类型加计算过程的顺序

输出类型

%ns (string)输出字符串,n是数字代表输出几个字符

%ni (int)输出整数。 n是数字代表输出几个数字

%n.mf (float)输出浮点数,n代表总位数,m代表小数位

输出格式

\a 响铃

\n 换行

\t 输出制表符,即tab键

\r 回车

\v 水平制表符

printf 命令输出文件内容

printf '%s' $(cat student.txt) (以字符串形式查看文件内容)

5、文本处理命令

这样看起来很乱只能通过制表符隔开,格式化输出printf可以识别制表符分隔符

5、文本处理命令

把成绩变为整型,平均成绩变为浮点型printf ' %s\t %s\t %s\t %s\t %s\t %s\t \n' $(cat student.txt) 但是发现,第一行文字不能识别成数字,然后自动变为0

5、文本处理命令

printf不识别管道符之后会联系awk命令,此时想要去除第一行字符,先print,grep 写在管道符之后,如下图

5、文本处理命令

文本三剑客

回忆grep命令

5、文本处理命令

局限性:只能提取行,不能提取列

选项

-o 只输出过滤内容
-i 不区分大小写
-w 以单词为单位进行过滤
-E 支持扩展正则
-n输出时带行号

5、文本处理命令

-c 统计
-v取反
-A 过滤字符所在行以及其下几行(可以指定数字)

5、文本处理命令

-B 过滤字符所在行以及其上几行

5、文本处理命令

-C过滤字符所在行以及其上下几行

5、文本处理命令

-q 安静模式

awk基本使用(行列都可以处理)

awk 选项(-F指定分隔符) 'BEGIN {操作} 匹配模式{动作1} 匹配模式{动作2}…… END {操作}' 文件名(匹配模式和动作用大括号区分,多个匹配模式中间用空格隔开)

printf和print

printf(需要输入”\n“自动换行符)

5、文本处理命令

print(不需要输入换行符可以自动换行)

5、文本处理命令

awk可以提取空格和制表符为分隔符的内容

查看磁盘使用百分率,并将%去掉(以%为分隔符取第一列)

5、文本处理命令

awk的选项-F 指定分隔符

若果想要打印2列用“,(默认以空格作为分隔符)”或者双引号指定分隔符

5、文本处理命令

5、文本处理命令

如果想要在分隔符中间再添加其他分隔符,双引号和单引号交替使用,可以再次调用变量为分隔符

5、文本处理命令

5、文本处理命令

awk的条件

awk运行过程详解

5、文本处理命令

一行一行处理,一个字段一个字段处理并输出:如果有BRGIN先执行BRGIN,之后讲第一行所有数据赋给$0,然后第一行第一列赋给$1第二列赋给$2······直到第一列全部赋值完成后,,如果需要输出,先把第一行满足条件的列输出。在将整个第二列赋值给$0,然后第二列的第一行赋值$1······最后执行END结束
如果有匹配模式,进行匹配,匹配成功执行操作,不成功,读取下一行
awk 保留字
BRGIN :在awk程序一开始时,尚未读取的任何数据之前执行,只在程序开始时执行一次(用于手工指定分隔符)

5、文本处理命令


在输出之前先输出个11111

END :在awk程序处理完所有数据,即将结束执行。END后的动作只在程序结束时执行一次

5、文本处理命令


如果每一行列相同,可以交给‘END {print NF}’去处理,可以通过最后一行的列数统计处列数,但是如果不相同,则不能在END中统计

5、文本处理命令

awk关系运算符
运算符


> 大于


< 小于


>=


统计平均成绩大于等于86分的学生的名字(首先排除第一行,如果,第六行大于86,则输出第二行)

5、文本处理命令


<=


== 等于


统计/etc/passwd下UID为1000的用户名

5、文本处理命令


等于和不等于可以完全匹配字符,此时切记字符要加双引号

5、文本处理命令


!= 不等于


包含匹配字符串和完全匹配

5、文本处理命令


A~B 判断字符串A中是否包含匹配B


判断第二列中名字包含Sc的学生的平均成绩(第六段)指定具体的某一列是因为防止一行中多个列都出现“Sc”字段

5、文本处理命令


awk识别字符必须使用//包含字符串正则表达式


//支持正则可以使用通配符哦

5、文本处理命令


如果一行没有重复的字段,无需怎加“$2~”包含符号

5、文本处理命令


A!~B 判断字符串A中是否不包含匹配B

5、文本处理命令

正则表达式
/正则/


输出Lm的平均成绩(指定列更好)

5、文本处理命令

awk在匹配模式和指定分的隔符都可以使用正则表达式

awk内置变量

$0 代表awk所读入的整行数据(相当于不写)
$n 代表当前读入行第n列字段(第n列)
补充:cut默认只能以空格作为分隔符,而awk默认可以以制表符和空格作为分隔符
NR 显示行号和NF当前拥有字段(列)数
NR和NF都是写入到print中

5、文本处理命令

由上图可知,虽然都正确输出,但是不够清晰,中间如果要加入制表符和相关解释说明的中文,要放入到双引号中

5、文本处理命令

NF详解


$NF代表打印的是最后一列

5、文本处理命令


若每行列相同,统计列数可以交给END配合NF处理

NR详解


$NR代表最后一列


NR一般代用在匹配模式下,指定输出某行

5、文本处理命令


如果指定打印3-5行

5、文本处理命令


指定打印第三行和第5行

5、文本处理命令

FNR awk同时处理两个文件可以用到

5、文本处理命令

由此可知,当NR>FNR时就可以判断,已经开始处理第二个文件

5、文本处理命令

5、文本处理命令

RS和FS
FS 指定读取记录分隔符,默认是空格或者制表符(以废,同选项中的“F”)识别时起作用


OFS和ORS


OFS指定输出的字段分隔符(默认为空格),输出时体现


ORS指定输出的记录分隔符,(即一个模块识别操作的分隔符,默认为换行符),输出时体现

5、文本处理命令


打印/etc/passed的用户名


如果不加BENGIN,会先把第一行读完,然后再指定分隔符已经晚了,第一行会被直接输出

5、文本处理命令


修改后显示

5、文本处理命令


看似cut更加简单,但是如果指定第三行uid必须为1000的用户,cut无法完成此条件截取,awk是这样截取的

5、文本处理命令

RS指定读取记录分隔符,默认是换行符,识别时起作用
ENVIRON调用系统中的变量,不需要用$调用
ENVIRON["PATH"]

5、文本处理命令

FILENAME 当前处理的文件名

5、文本处理命令

参数个数和参数组
ARGC命令参数的个数相当于shell中的 $#
ARGV命令参数数组,相当于$@ $*
getline获取下一行(类似于sed中的N;)

5、文本处理命令

5、文本处理命令

获取行并模块化,getline之后$0变成了第二行,所以第一行的值必须用tmp保存

5、文本处理命令

sed实现方式

5、文本处理命令


以N加分号配合换行符替代方式实现。为了方便记忆,在替换中所有-n和p一律省略

length("字符串") 求字符长度

5、文本处理命令

输出变量配合echo使用
求行字符长度为2的行,不要慌,放在条件中而已

5、文本处理命令

split() 切割字符串化为数组形式处理

5、文本处理命令

格式:split("字符串",数组名称,"分隔符") 按指定分隔符将字符串且各位数组

5、文本处理命令

5、文本处理命令

大小写取代
toupper() 小写换大写
tolower() 大写换小写

5、文本处理命令

字符串截取

5、文本处理命令

字符串替换(sub和gsub)

5、文本处理命令

sub(gsub)(“需要被替换的字符”,“替换成的字符”,“要被替换的字段”)sub代表只替换一个字符,gsub代表本字段的所有字符都替换,指定输入哪个字段来表示,$0为整行全部替换

5、文本处理命令

吧字符”0“替换成字符”?“,只替换第一行,然后输出整行
时间函数
strftime() 格式化输出,类似于date

5、文本处理命令

输出当天访问httpd IP的个数,并统计排序

5、文本处理命令

systime() 获取时间戳

5、文本处理命令

system() 调用linux系统命令

5、文本处理命令

支持判断循环 if ; else if ; else ; while 支持数组
awk计算
字符串格式化输出(输出格式和计算过程用逗号隔开)

5、文本处理命令

5、文本处理命令

非格式化输出极简版

5、文本处理命令


print支持直接计算

awk例题

例题1,截取stat中的权限
方法1(管道符分开截取)

5、文本处理命令

方法2(正则匹配一步到位)

5、文本处理命令

例题2,截取网址
各种秀就对了

5、文本处理命令

sed命令(选项都是英文,主要处理行)

sed(Stream Editor)流文件处理工具主要是用来将数据进行选取、替换、删除、新增,作用,替代vim的作用,不需要进行交互

格式:sed [选项] '地址 操作;地址 操作;······' 文件名(单引号中分号将多个部分隔开,地址和操作空格隔开)

sed工作流程

sed命令将一行读取到模式空间(由上到下一行一行打印)
进行匹配,如果匹配成功,就执行操作,如果不匹配就丢弃,读取下一行
直到读取到文件最后一行

选项:

-n 只打印处理的行,多结合操作p一起(对比图:)

5、文本处理命令

-i sed修改结果直接修改文件内容,而不是由屏幕输出
删除2-4行,并写入数据

5、文本处理命令

-r 支持扩展正则

地址操作

;可以隔离多个操作
‘动作1; 动作2;动作3......‘
将第三行和第四行删除并写入
可以直接在地址中加入分号进行多行操作

5、文本处理命令

p 打印输出指定行

5、文本处理命令


2p打印第二行 2,4p打印2到4行 2,$打印第二行到文件结尾(一般加-n)

5、文本处理命令

正则使用方法


使用正则/字符表达式/


此时和grep作用相似(包含匹配)

5、文本处理命令


例子2

5、文本处理命令


-r 让sed支持扩展正则

5、文本处理命令

a 行追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾要用 “\”代表数据未完结


在第二行后追加一个 11111111

5、文本处理命令


使用 “\”追加,怕自动换行导致单词失效 输出"\"回车自动换行输入

5、文本处理命令

i 行插入,当前行前插入一行或多行。"\"作用同上

5、文本处理命令

d 行删除,删除指定行


删除2-4行输出屏幕

5、文本处理命令

c \行替换,"\" 作用同上


基本替换“c“


将整个第三行替换为4 abc 11 22 33 44.5

5、文本处理命令


将第三行替换为 aaaaaaaa

5、文本处理命令


sed字符串替换


sed字符串全局替换


格式:sed ' s/old/new/g ' student.txt


把Sc改成SS,把74改成99 把Tg改成TT

5、文本处理命令


批量加注释:sed 's/^/#/g' studnet.txt

5、文本处理命令


把第二行换成11111,第三行换成22222

5、文本处理命令


sed局部替换(可用于截取字符串)

5、文本处理命令


格式:


第一坨


s


第二坨


三个肉卡2符号放在第二坨(卡符号卡的是贪婪匹配,符号要卡准)


第三坨


\数字,取第几个肉


分隔符“/”或者“#”


例题2:

5、文本处理命令


第三段可以指定输出多段

5、文本处理命令


例1:卡域名


卡之前和卡之后都要卡才能卡准

5、文本处理命令


“/”作为分隔符的话需要用#,没有/做分隔符可以用“/”

5、文本处理命令


例2:卡stat里面的权限

5、文本处理命令


当然一口气划分好也可以

5、文本处理命令

5、文本处理命令


极简版,不太好看

5、文本处理命令


例3:取用户

5、文本处理命令


替换操作

5、文本处理命令

分组打印
-n 读入下一行,上一行位于模式空间中的内容会被顶替掉(可以指定奇数行和偶数行)

5、文本处理命令

5、文本处理命令

N与上一行同时保持在模式空间(两行两行读取,和paste相似,每多写一个n就会多一行并入)配合替换使用

5、文本处理命令

5、文本处理命令


写两个N中间用;表示将后两行与第一行分成一个组

5、文本处理命令

5、文本处理命令

5、文本处理命令

5、文本处理命令

w 保存

所有文本处理大总结

wc -L head tail grep -w

${字符串 操作}

操作部分(: : #(#) 字符*字符 %(%)字符 *字符 /(/)字符/字符)

cut -d ‘ ’ -f 2,4,6,8······

tr 常用tr -s 去除多余空格 tr -d ' ' 去除空格 tr [a-z] [A-Z]替换

sort -n 排序 -t -k 2(2,2;3.1) -r反向排序

sort 配合uniq -c统计重复行

paste 用于合并以及分行

-s 一行输出

-d 指定连接符,两行合并可以-d "符号/n"

超过两行合并使用-d " " - - - <文件名

xargs -n 数字 以字段合行

join 若第一列相同则合并,其他列按照第一列的规则(行数)输出在后,否则不输出

sed -nr 'N;N;(分行必备) s/\n//g;(N必配) s/(.*)(.*)(.*)(.*)/\1\3\5/ p'

发布者:LJH,转发请注明出处:https://www.ljh.cool/35435.html

(0)
上一篇 2023年4月5日 下午10:44
下一篇 2023年4月5日 下午10:50

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注