当前位置: 首页 > news >正文

Linux三剑客

文档一:
aaa.txt内容如下
2018-11-26
hello world!
192.168.136.128
192.168.136.129
20181127
2018-12-12
2018-11-11
aaa bbb
文档二:
student.txt内容如下
ID Name gender Mark
1 youyou women 59
2 abin man 60
3 tangge women 98
一、grep:
1.正则表达式--grep
正则匹配日期: grep '[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}' aaa.txt
正则匹配IP: grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' aaa.txt
2.Cut --过滤文件中的内容
使用grep查询出想要的内容,然后使用管道二次过滤:
Cut: cut [选项] 文件名
选项:
-f 列号:提取第几列
-d 分隔符:按照指定分隔符分割列
注意:默认分隔符是制表符 --tab
取出student.txt第2列数据: cut -f 2 student.txt
取出student.txt第2,4列数据: cut -f 2,4 student.txt
取出非root用户的用户名: grep "/bin/bash" /etc/passwd | grep -v "root" | cut -f 1 -d ":"
cut命令的局限:
cut取不出非同一分隔符的字段:如 df -h | cut -d " " -f 1,3
 
二、printf:(为awk铺垫
 
输出格式:
[hadoop@hadoop1 test]$ printf %s 1 2 3 4 5 6
123456[hadoop@hadoop1 test]$ printf '%s\n' 1 2 3 4 5 6
1
2
3
4
5
6
[hadoop@hadoop1 test]$ printf '%s\t%s\t%s\n' 1 2 3 4 5 6
1 2 3
4 5 6
输出文件:
不调整任何输出格式:
[hadoop@hadoop1 test]$ printf '%s' $(cat student.txt)
IDNamegenderMark1youyouwomen592abinman603tanggewomen98
调整格式后:
[hadoop@hadoop1 test]$ printf '%s\t%s\t%s\t%s\t\n' $(cat student.txt)
ID Name gender Mark
1 youyou women 59
2 abin man 60
3 tangge women 98
三、awk:
在awk命令的输出中支持print和printf命令
print:print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符
 
awk '条件1{动作1} 条件2{动作2}........' 文件名
条件:
一般使用关系表达式作为条件
x > 10 判断变量 x是否大于10
x >= 10 大于等于
x <- 10 小于等于
动作:
格式化输出
流程控制语句
 
使用awk输出student.txt第2,4列: cut -f 2,4 student.txt
强大的awk弥补了cut的缺陷:
awk-BEGIN: 在第一个动作之前加入一个执行一次的动作
[hadoop@hadoop1 test]$ awk 'BEGIN{printf "This is a transcript \n"}{printf $2 "\t" $4 "\n"}' student.txt
This is a transcript
Name Mark
youyou 59
abin 60
tangge 98
awk-END: 在最后一个动作之后加入一个执行一次的动作
[hadoop@hadoop1 test]$ awk 'END{printf "The End \n"}{printf $2 "\t" $4 "\n"}' student.txt
Name Mark
youyou 59
abin 60
tangge 98
 
The End
 
awk 对文本的扫描是依行为单位, 这样就产生了一个问题怎么在扫描的开始以及结束之后的执行一些操作?
awk BEGIN{} 是在文件开始扫描前进行的操作 END {} 是扫描结束后 进行的操作 ;一般的操作都是需要在BEGIN 设置一个初始的量
shell 换行的使用 \
eg:
 
awk_test.txt
 
1 line1 field1
2 line2 field2
3 line3 field3
4 line4 field4
5 line5 field5
6 line6 field6
7 line7 field7
8 line8 field8
9 line9 field9
10 line10 field10
11 line11 field11
 
awk 'BEGIN{print "地点\t";total=0;} {print $3;total = total+NR} END{printf "行数总计: %2d\n", total}' awk_test.txt
 
四、sed:
sed是一种几乎包括在所有UNIX平台(包括LInux)的轻量级流编辑器,sed主要是用来将数据进行选取,替换,删除,新增的命令.
sed [选项] '[动作]' 文件名
选项:
-n :一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会吧经过sed命令处理的行输出到屏幕
-e :允许对输入数据应用多条sed命令编辑
-i :用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a :追加,在当前行后添加一行或者多行
c :行替换,用c后面的字符串替换原数据行
i :插入,在当前行前插入一行或者多行,
d:删除,删除指定的行
p :打印,输出指定的行
s :字符串替换,用一个字符串替换另一个字符串,格式为 "行范围s/旧字符串/新字符串/g" (和vim中的替换格式类似)
 
sed行数据操作:
查看文件的第二行:
[hadoop@hadoop1 test]$ sed -n '2p' student.txt
删除第2-4行的数据,但不修改文件本身:
[hadoop@hadoop1 test]$ sed '2,4d' student.txt
删除第2-4行的数据,修改文件本身:
[hadoop@hadoop1 test]$ sed -i '2,4d' student.txt
在第二行后追加hello world! 不对原文件做编辑:
sed '2a hello world!' student.txt
在第二行后追加hello world! 对原文件做编辑:
sed -i '2a hello world!' student.txt
在第二行前插入两行数据:
sed -i '2i hello world!' student.txt
替换第二行数据:
替换字符串:
sed 's/旧字符串/新字符串/g' 文件名
替换第五行数据60为99
同时替换youyou 和 abin 为空和为--:
 

转载于:https://www.cnblogs.com/gentle-awen/p/10023133.html

相关文章:

  • [Bada开发]初步入口函数介绍
  • WebSocket初探
  • webpack4 一点通
  • 小米抢购神器-开放源码
  • 互联网企业数据安全体系建设
  • 超过响应缓冲区限制
  • 应用监控的选型思考
  • MyEclipse恢复被删除的文件
  • 贺建奎:愿意用自己孩子第一个尝试,研究不小心泄露,英美也有类似实验
  • 线性回归感觉会有用 临时保存,
  • 什么是UE、UI、UCD、UED?UE、UI、UCD、UED四者的区别(转)
  • 20181126上课截图
  • POJ 1364 King --差分约束第一题
  • Gradle 5.0 正式版发布
  • STM32 外扩 SRAM
  • 分享的文章《人生如棋》
  • .pyc 想到的一些问题
  • 11111111
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • js数组之filter
  • Laravel5.4 Queues队列学习
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 从零搭建Koa2 Server
  • 浮现式设计
  • 汉诺塔算法
  • 使用agvtool更改app version/build
  • 使用SAX解析XML
  • 我与Jetbrains的这些年
  • 一道闭包题引发的思考
  • 转载:[译] 内容加速黑科技趣谈
  • 【云吞铺子】性能抖动剖析(二)
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​渐进式Web应用PWA的未来
  • #控制台大学课堂点名问题_课堂随机点名
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2)(2.10) LTM telemetry
  • (C语言)逆序输出字符串
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (转载)hibernate缓存
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET 表达式计算:Expression Evaluator
  • .NET 分布式技术比较
  • .NET框架
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • /run/containerd/containerd.sock connect: connection refused
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @JsonFormat与@DateTimeFormat注解的使用
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧