linux shell 处理日语,linux —— shell 编程(文本处理)
导读
本文为博文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 编程(文本处理)相关推荐
- Linux学习笔记 -- rpm 与 shell 编程
目录 rpm 与 YUM rpm 包的管理 rmp 包 查询 安装 卸载 yum 安装 JDK mysql 8.0 离线安装 Centos 7 忘记mysql的root密码 Shell 编程 shel ...
- linux 中输入bash,Linux上Bash Shell编程
Linux下Bash Shell编程 Bash Shell Programming in Linux Linux下Bash Shell编程 Bash what? 进阶的内容是什么? Okay, I g ...
- linux简单重定向代码,Linux Shell编程(26)——代码块重定向
像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...
- linux 脚本编写基本命令,Linux Shell命令行及脚本编程实例详解
<Linux典藏大系:Linux Shell命令行及脚本编程实例详解>共15章,分为两篇.主要内容包括:Linux 及Linux Shell简介.初识Linux Shell.常用Shell ...
- Linux shell、内核及系统编程精品资料下载汇总 topsage
shell编程.sed.awk.grep相关: UNIX shell by Example 第四版 UNIX shell范例精解 (第4版) 中文高清PDF下载 Shell脚本学习指南(Classic ...
- 【Linux】Linux学习(四)Shell编程
Linux学习(四)Shell编程 Shell概述 Shell脚本入门 变量 系统预定义变量 自定义变量 特殊变量 运算符 条件判断 流程控制(重点) if判断 case语句 for循环 while循 ...
- Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)
shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...
- Linux系统应用 第八章 Shell编程入门
8.1Shell编程过程 在Linux中,Shell不但能与用户进行逐个命令交互执行,也可以通过脚本语言进行编程.通过对Shell进行编程,可使大量任务自动化,对于系统管理.系统维护方面特别有用. 复 ...
- linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战
课程文件目录: Linux自动化运维系列 Shell高级脚本自动化编程实战 [6.1G] ┣━━01.Shell基础概述 [315.1M] ┃ ┣━━1-1 Shell脚本体系概述.mp4 [154. ...
最新文章
- 关于C#值类型,引用类型,值传递,引用传递
- Celt Codec简单使用方法
- 手把手教你从Core Data迁移到Realm
- SQL2000 统计每周,每月,每季,每年的数据
- Java并发7:并发工具类
- centos7 安装/卸载 任意版本的mariadb(mysql)
- python创建实例属性_Python学习笔记__6.5章 实例属性和类属性
- 商业医疗险住院报销需要什么材料?
- C++是C语言演变过来的,为何不能代替C语言?
- C盘爆满,使用DiskGenius调整C盘大小,实操记录
- 使用阿里云的ip地址查询服务-购买ip地址查询服务
- PHP全国快递寄件接口,1天接入四通一达,极兔,宅急送,德邦,京东,天天
- 中国富豪挖掘第一桶金的方法
- 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0
- 少年,请多一些开疆拓土的勇气——写给在C和C++间犹豫的学生
- 走出 scipy 的深坑:用 numpy 实现散列数据网格化
- LTE学习---PLMN选网(23.122协议R9)
- 【单片机原理及其应用】第五章定时器的介绍和习题分析
- 1.VB_求解圆的体积
- jsp汽车零配件销售进销存系统
热门文章
- 腾讯文学动作密集 疑为手Q发力移动阅读铺路
- PlantSimulation学习笔记:实际建模中3种故障模式(Failure relates to)到底该如何选择?
- 怎样判断一个加盟品牌是否值得加盟?
- VRP文献赏读02:Optimization Approaches for the Traveling Salesman Problem with Drone
- Cocos2d-x 单机游戏防八门神器修改数据
- 闪聚支付 第3章-微信支付接入指南
- 女人入洞房那天…………
- 自动语音识别技术(ASR)在聋哑儿童计算机辅助教学中的开发与应用
- Cytoskeleton——高纯度Tubulin聚合检测试剂盒
- 微信小程序scroll-view组件套textarea框内文字和placeholder上飘解决