导读

本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展。(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行)

1、基本文本处理

sort:用于排序,常用参数 -t 指定一行的分隔符 -k 指定具体排序的规则 -d 按字典序排列  -f 忽略大小写

-u (unique)丢弃相同指定字段的记录

unique:报告或删除文件中重复的行。 -c 在输出行前加上出现的次数    -d  (duplicated)显示重复的行

-u 仅显示不重复的行

wc:  统计文本行数,字数和字符数。    -c 字符数    -w  单词数    -l  行数

pr:将文本转换成适合打印的格式。   -c 显示的列数(截断超出的部分)

fmt: 优化文本的格式。  -w 设置一行显示的最大行宽   -s  只对过长的行进行换行,不要自动回填。

fold:限制文本宽度(强行截断并换行)。 -w 指定宽度  -s 只在空格处换行。

cut:截取行的字段。   -delimiter  设置字段分割符 -f List 设置截取的域

List可以是M,M-,M-N -M;可以用逗号指定多个

join:连接两个文件的数据字段。  join file1 file2  -1 M  -2 N    M、N指定匹配的字段

tr: 文本替换。 tr set set :将str1上字符替换成str2上对于位置的字符; (可以是 tr 'a-z' 'A-Z')

tr {-d|-s} set :-d 删除set上的每一个字符 ;-s 除去连续出现的set中的字符,至只剩下单个

tr -c (complement 互补)使用set1的外的其他字符 [例子:tr -cs '[:lower:][:upper:]' '[

*]' 单词表]

2、流编辑器sed

0)sed 的作用和工作方式

sed 是一个非交互式的的行编辑器,工作时,从指定的输入读入一行数据存入被称为模式空间(Pattern Space) 的临时缓冲区,然后按照指定的sed编辑命令处理缓冲区里面的内容,将结果输出到标准输出后从模式空间中删除,然后继续读取下一行继续工作。

1) 地址范围

sed-e '1,5d' test.txt

sed -e '/^#/d' test.txt

规则表达式中使用的表达式字符:

字符

描述

^

与行首匹配

$

与行尾匹配

.

与任意一个字符匹配

*

与之前一个字符的零个或多个出现匹配

[]

与[]之间的所有字符匹配

2) 参数

-e     将脚本添加到命令执行,如上面的 '/^#/d'

-n    禁止模式空间的自动打印

替换文本:   sed -e "s/benson/BENSON/g"  将benson 替换成大写

sed -e "1,10s/benson/BENSON/g" 将1-10行的benson变成大写

s/// 的 “/”可以被替换:比如 sed -e "s:/usr/local:/usr:g"

多条命令一起执行:  sed -n -e "=;p"   打印行号;打印行 (等价与 sed -e "=" -e "p" )

多条命令于同一地址范围:sed -n -e '1,5{s/benson/BENSON/g;s/laur/LAUR/g}'

把命令放在文件fsed里:sed -n -f fsed

3、awk模式扫描与处理语言

awk 具有成为一门语言应有的要素:变量,函数等,是强大的处理工具。

例子:

awk -F ":" '{print "USER:" $1 "SHELL: " $7 }' /etc/passwd结果:

USER:root SHELL:/bin/bash

USER:daemon SHELL:/usr/sbin/nologinUSER:sync SHELL: /bin/sync

上面的命令也可以写入文件file.awk中:

awk -f file.awk /etc/passwd

BEGIN{ FS=":"}

{

print"USER:" $1 "SHELL:" $7}

file.awk

3.1 awk的变量和数组

1)用户自定义变量

命名规则:[A-Za-z_][A-Za-z0-9_]*

2) 常用的内建变量

变量

说明

FILENAME

当前输入的文件名称

FNR

当前输入的文件的记录数

FS

字段分隔符(支持正则表达式),默认空格

NF

当前记录的字段数

NR

在工作(job)中的记录数

OFS

输出字段分隔字符

ORS

输出记录分隔字符(默认为“

”)

RS

输入记录分隔字符

3) awk数组  的字符索引支持数字、字符串

sit[google]="https://google.com"sit[baidu]="http;//baidu.com"数组存储是稀疏的,可直接定义如下两项:

x[1]=1234x[1000]=234234delete x 将删除数组里所有的元素

删除后,可以继续定义如下:

x=567

访问环境变量:ENVIRON["PATH"]

3.2 算数运算

awk的运算符

运算符

描述

例子

=  +=  *=   /=  ^=  **=

赋值

?=

C条件表达式

||   &&

逻辑与或

++--

自增自减

~   ~!

匹配正则表达式和不匹配正则表达式

<   <=  >  >=  !=  ==

关系运算符

空格

连接

+ -

加、减

* /  %

乘除 求余

+  -  !

一元加减,逻辑非

^  ***

求幂

$

字段引用

in

数组成员

awk支持的算数函数:

sin(x) cos(x) atan2(x,2) :x,y 范围内的余切 int(x):没有舍入地取整 exp(x)求幂 log(x):自然对数 sqrt(x)

rand():产生>=0 <1的随机数 srand(x):x是rand()的种子

3.3 条件和循环语句

条件语句和循环语句与C类似,支持break,continue(可以不使用;结尾)

例子:将下面记录每组一行输出

abc,123tttt dddd

ddd,324ssss ssdd

sdfsd sdf

dddd

sfdfsdf

待处理数据

BEGIN{

FS=""RS=""    # RS设置为""将可以解析多行记录(以空行分隔)

ORS=""#输出记录分隔符不要换行

}

{

x=1

while(x

{

print $x""x++}

print $NF""}

使用while循环

结果:

abc,123tttt dddd

ddd,324ssss ssdd sdfsd sdf

dddd sfdfsdf

处理结果

3.4 自定义函数

在函数中,指定的参数将被当做局部变量,而所有函数体内未出现在参数列表中的变量会被视为全局性。为此,awk允许声明过多的参数用于局部使用如:

function add(x,y, sum)

{sum = x+y

returnsum}

如果需要使用函数进行引用传递,只能通过传入数组来实现:

引用传递

3.5 字符串处理

格式化输出:

printf("%s have %d jobs","somebody",3)

strout= sprintf("%s have %d jobs","somebody",3)

格式化输出的转义字符:c s d ld (十进制长整数) u lu x lx o lo e(科学计数法表示的浮点数) f g(e或f中比较短的一种)

printf 修饰符:  - 左对齐     #显示八进制时在前面加个0;显示十六进制时在前面加0x

+显示defg 转换的整数时,加上正负号    0  填充空白为0

具体的格式为:%-width.precision fotmat-specifier

awk内置字符串函数:

awk函数

描述

sub(/reg/,newsubstr,str)

替换第一个匹配的字符串

gsub(/reg/,newsubstr,str)

替换所有匹配

index(str,substr)

返回substr在str中的索引

length(str)

长度

match(str,/reg/)

如果在str中找到正则表达式/reg/匹配的串,则返回出现的位置,未找到则返回0

split(str,array,sep)

使用sep分隔到array

substr(str,position[,length])

返回str从position开始的length个字符

tolower(str)

变小写

toupper(str)

变大写

sprintf("fmt",expr)

格式化返回字符串

3.6 多文件处理

10001南京 佛挡杀佛 sdfsdf10002天津 发生地方 双方的发生10003 石家庄 发生地方 发生地方

a.txt

11000,南京11003,天津12000,河北省13000,品上线12344,石家庄

b.txt

BEGIN{

FS="[ ,]"OFS=","}

NR<=FNR{

array[$2]=$1}

NR>FNR{

print $1,$2,array[$2]

}

join.awk

awk -f join.awk a.txt b.txt

11000,南京,10001

11003,天津,10002

12000,河北省,13000,品上线,12344,石家庄,10003

执行结果

linux shell 处理日语,linux —— shell 编程(文本处理)相关推荐

  1. Linux学习笔记 -- rpm 与 shell 编程

    目录 rpm 与 YUM rpm 包的管理 rmp 包 查询 安装 卸载 yum 安装 JDK mysql 8.0 离线安装 Centos 7 忘记mysql的root密码 Shell 编程 shel ...

  2. linux 中输入bash,Linux上Bash Shell编程

    Linux下Bash Shell编程 Bash Shell Programming in Linux Linux下Bash Shell编程 Bash what? 进阶的内容是什么? Okay, I g ...

  3. linux简单重定向代码,Linux Shell编程(26)——代码块重定向

    像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...

  4. linux 脚本编写基本命令,Linux Shell命令行及脚本编程实例详解

    <Linux典藏大系:Linux Shell命令行及脚本编程实例详解>共15章,分为两篇.主要内容包括:Linux 及Linux Shell简介.初识Linux Shell.常用Shell ...

  5. Linux shell、内核及系统编程精品资料下载汇总 topsage

    shell编程.sed.awk.grep相关: UNIX shell by Example 第四版 UNIX shell范例精解 (第4版) 中文高清PDF下载 Shell脚本学习指南(Classic ...

  6. 【Linux】Linux学习(四)Shell编程

    Linux学习(四)Shell编程 Shell概述 Shell脚本入门 变量 系统预定义变量 自定义变量 特殊变量 运算符 条件判断 流程控制(重点) if判断 case语句 for循环 while循 ...

  7. Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)

    shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...

  8. Linux系统应用 第八章 Shell编程入门

    8.1Shell编程过程 在Linux中,Shell不但能与用户进行逐个命令交互执行,也可以通过脚本语言进行编程.通过对Shell进行编程,可使大量任务自动化,对于系统管理.系统维护方面特别有用. 复 ...

  9. linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战

    课程文件目录: Linux自动化运维系列 Shell高级脚本自动化编程实战 [6.1G] ┣━━01.Shell基础概述 [315.1M] ┃ ┣━━1-1 Shell脚本体系概述.mp4 [154. ...

最新文章

  1. 关于C#值类型,引用类型,值传递,引用传递
  2. Celt Codec简单使用方法
  3. 手把手教你从Core Data迁移到Realm
  4. SQL2000 统计每周,每月,每季,每年的数据
  5. Java并发7:并发工具类
  6. centos7 安装/卸载 任意版本的mariadb(mysql)
  7. python创建实例属性_Python学习笔记__6.5章 实例属性和类属性
  8. 商业医疗险住院报销需要什么材料?
  9. C++是C语言演变过来的,为何不能代替C语言?
  10. C盘爆满,使用DiskGenius调整C盘大小,实操记录
  11. 使用阿里云的ip地址查询服务-购买ip地址查询服务
  12. PHP全国快递寄件接口,1天接入四通一达,极兔,宅急送,德邦,京东,天天
  13. 中国富豪挖掘第一桶金的方法
  14. 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0
  15. 少年,请多一些开疆拓土的勇气——写给在C和C++间犹豫的学生
  16. 走出 scipy 的深坑:用 numpy 实现散列数据网格化
  17. LTE学习---PLMN选网(23.122协议R9)
  18. 【单片机原理及其应用】第五章定时器的介绍和习题分析
  19. 1.VB_求解圆的体积
  20. jsp汽车零配件销售进销存系统

热门文章

  1. 腾讯文学动作密集 疑为手Q发力移动阅读铺路
  2. PlantSimulation学习笔记:实际建模中3种故障模式(Failure relates to)到底该如何选择?
  3. 怎样判断一个加盟品牌是否值得加盟?
  4. VRP文献赏读02:Optimization Approaches for the Traveling Salesman Problem with Drone
  5. Cocos2d-x 单机游戏防八门神器修改数据
  6. 闪聚支付 第3章-微信支付接入指南
  7. 女人入洞房那天…………
  8. 自动语音识别技术(ASR)在聋哑儿童计算机辅助教学中的开发与应用
  9. Cytoskeleton——高纯度Tubulin聚合检测试剂盒
  10. 微信小程序scroll-view组件套textarea框内文字和placeholder上飘解决