Linux笔记

cut 垂直切割列,然后显示

-d 自定义分隔符,后面紧跟着分隔符的参数
-f2,3 显示第二列,第三列
-s 不显示没有分隔符的行
cut -d' ' -f2,3 -s test.txt

sort:排序文件的行,默认字典序

n:按数值排序
r:倒序
t:自定义分隔符
k:选择排序列
u:合并相同行
f:忽略大小写    
       sort -t' ' -k2 -n -r sort.txt

wc 统计

wc -l grep.txt 
l : 统计行数 lines 
 cat grep.txt | wc -l  查询grep.txt文件的行数

sed 行编辑器

sed [options] ‘AddressCommand’ file …
-n: 静默模式,不再默认显示模式空间中的内容
-i: 直接修改原文件
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
-r: 表示使用扩展正则表达式
sed:行编辑器Command
d: 删除符合条件的行;
p: 显示符合条件的行;
a \string: 在指定的行后面追加新行,内容为string
    \n:可以用于换行
i \string: 在指定的行前面添加新行,内容为string
r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE: 将地址指定的范围内的行另存至指定的文件中; 
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
g: 行内全局替换
i: 忽略字符大小写
s///: s###, s@@@    
    \(\), \1, \2
sed:行编辑器Address
可以没有
给定范围
查找指定行/str/

sed 用途

直接编辑文件
上下行新增
删除行
行内某一字段,左右插入文本

sed -n "2p" sed.txt  打印第二行
sed "3d" sed.txt 删除第三行(假删)
sed -i "3d" sed.txt 删除第三行(真删)
sed "2a\hello" sed.txt 在第二行后面追加一行hello字符(假加)
sed -i "2a\hello" sed.txt 在第二行后面追加一行hello字符(真加)
sed -i "s/str1/str2" sed.txt  查找str1,替换str2,
// 左右替换,在aaa的左边插入一个字符串bbb aaa
sed "s/aaa/bbb aaa" sed.txt 查找bbb aaa 替换aaa,等效于插入

awk 是一个强大的文本分析工具。

相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk -F ‘{pattern + action}’ {filenames}

支持自定义分隔符
支持正则表达式匹配
支持自定义变量,数组 a[1] a[tom] map(key)
支持内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
支持函数
print、split、substr、sub、gsub
支持流程控制语句,类C语言
if、while、do/while、for、break、continue

demo

// 以/etc/passwd文件为例
[root@client ~]# cp /etc/passwd ./passwd.txt
[root@client ~]# cat passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@client ~]# awk -F':' '{ print $1}' passwd.txt 
root
bin
daemon
adm
// 还可以使用下面的命令达到同样的效果
[root@client ~]# cut -d':' -f1 passwd.txt
root
bin
daemon
adm
// 对于awk的注释
//按行处理,-F':' 以:来切割,'{ }' 匿名函数,print $1 函数体 $1 第一列
//单引号的原因,$ 对于bash是敏感的,防止被bash误解为bash的参数,强引用,防止被 bash识别扩展,

//BEGIN 开始调用一次,表头
//END 结束调用一次,表尾
[root@client ~]# awk -F':' 'BEGIN{print "name\tshell"} {print $1 "\t" $7} END{print "--- end ---"}' passwd.txt
name	shell
root	/bin/bash
bin	/sbin/nologin
daemon	/sbin/nologin
adm	/sbin/nologin
...
--- end ---
[root@client ~]# awk -F':' '{print NR"\t"NF"\t"$1}' passwd.txt
1	7	root
2	7	bin
3	7	daemon
4	7	adm

awk 处理文本

数据
Tom 0 2012-12-11 car 3000
John 1 2013-01-13 bike 1000
vivi 1 2013-01-18 car 2800
Tom 0 2013-01-20 car 2500
John 1 2013-01-28 bike 3500
其中第二列 0=“Manager”,1=“Worker”

要求 :计算每个人一月份的的工资,同时打印职级

// 数据文件
[root@client ~]# cat awk.txt 
Tom	 0   2012-12-11      car     3000
John	 1   2013-01-13      bike    1000
vivi	 1   2013-01-18      car     2800
Tom	 0   2013-01-20      car     2500
John	 1   2013-01-28      bike    3500
// 计算脚本文件
[root@client ~]# cat awk.ct
BEGIN{
    print "name\tsalary\tjob" ;
}

{
	split($3,date,"-");
	if(date[2]=="01"){
		name[$1]+=$5;
   		if($2=="0"){
			role[$1]="Manager";
		}else{
			role[$1]="Worker";
		}	
	}
}

END{
	for(i in name){
		print i "\t" name[i] "\t" role[i];
	}
}
// 使用awk计算并生成报表
[root@client ~]# awk -f awk.ct awk.txt 
name	salary	job
vivi	2800	Worker
Tom	2500	Manager
John	4500	Worker

find

find path -option [ -print ] [ -exec -ok command ] {} ;
demo

// 将目前目录及其子目录下所有最近 20 天内更新过的文件列出 
[root@client ~]# find . -ctime -20
.
./.bash_history

参考 Linux find命令 http://www.runoob.com/linux/linux-comm-find.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值