Linux文本处理实战:Sed、Split、Tr、Uniq、Tee命令从入门到入土

sed操作 --实现过滤和替换

1、可以进行查询操作

命令

含义

sed 可选项 目标文件

对目标文件 进行 过滤查询替换

可选参数

可选项

英文

含义

p

print

打印

$

代表 最后一行

-n

仅显示处理后的结果

-e

expression

根据表达式 进行处理

2、搞一些数据 6.txt

aaa java root
bbb hello
ccc rt
ddd root nologin
eee rtt
fff ROOT nologin
ggg rttt

3、列出6.txt中的3~5行的数据

cat 6.txt | sed -n -e '3,5p'

假如没有学过sed可以这么干:
head -5 6.txt | tail -3

显示第一行到最后1行的数据:

cat 6.txt | sed -n -e '1,$p'

显示第二行到最后一行
cat 6.txt | sed -n -e '2,$p'
显示行号:

可选项

含义

=

打印当前行号

打印第三行到第五航的数据,显示行号

一种写法,没有使用sed ,而是使用了cat -n
cat -n 6.txt|sed -n -e '3,5p'

另一种写法:
sed -n -e '3,5=' -e '3,5p' 6.txt

sed进行查找:
// 需求是查找每一行中包含login的数据
cat 6.txt | sed -n -e '/login/p'
cat 6.txt| grep login

[root@bigdata01 gaoji]# grep -n login 6.txt
4:ddd root nologin
6:fff ROOT nologin
[root@bigdata01 gaoji]# awk '/login/' 6.txt
ddd root nologin
fff ROOT nologin
[root@bigdata01 gaoji]# sed -n -e '/login/p' 6.txt
ddd root nologin
fff ROOT nologin

不区分大小写的查找,使用 I 参数 (大i)

Sed 中可以使用正则表达式:
cat 6.txt|sed -n -r -e '/r+t/p'    
-r  后面可以跟正则表达式   regex

r+ 表示 r 可以出现一次到多次   r后面必须跟上t

思考: 在这个里面如何写一个正则表达式,表示以r开头,以t结尾
a*   a出现0次到多次
a+   a出现1次到多次
Sed 进行删除操作:

先学习一个新命令 nl 可以查看文件,该文件自动添加行号

选项使用d 进行删除

显示除了3到5行的所有数据:
nl 6.txt | sed -e '3,5d'
nl 6.txt | sed -e '3,$d'  // 只显示前两行数据了

[root@bigdata01 datas]# cat 6.txt | sed -e '3,$d' | cut -d ' ' -f 2
java
hello
还可以使用sed修改内容

参数

英文

含义

i

insert

目标前面 插入内容

a

append

目标后面 追加内容

1、在6.txt的第一行前面插入 xxxxxxx,并显示行号

nl 6.txt | sed -e '1i xxxxxxxx'
2、在6.txt的第二行后面插入 SSSSSSS,并显示行号
nl 6.txt | sed -e '2a SSSSSSSS'

sed还可以进行数据的替换

s/oldString/newString/

replace

替换

把6.txt中的nologin替换成为huawei,并显示行号
cat  6.txt | sed  -e 's/nologin/huawei/'  // 按照字符串进行替换

cat  6.txt | sed  -e '3c laoyan'  // 按照行进行替换

以上的替换都是没有修改原来的数据的,sed也可以直接对原数据进行直接更改。

直接更改数据,首先数据进行备份

cp  6.txt  7.txt
sed -i -e 's/nologin/huawei/' 7.txt
sed -i -e '2c laoyanlaoyan' 7.txt
sed -i -e '1,2d' 7.txt  // 真删除数据

Sed综合练习:获取本机的IP地址

ifconfig  在 linux上可以获取本机的IP信息
ipconfig  在windows上可以获取IP地址信息

因为我们使用的是mini版,没有这个服务:
yum search ifconfig
yum install -y net-tools.x86_64
安装完毕就可以使用ifconfig 这个服务了。

符号

含义

^

表示开始

^aaa 表示以 aaa 开始

$

表示结尾

bbb$ 表示以 bbb 结尾

.*

表示任意

^.* 表示以 任意字符开始

需求是:通过ifconfig 命令获取我的IP地址
ifconfig ens33 | grep 'inet ' | sed -e 's/inet //' | sed -e 's/  netmask.*//'

也可以这么写: \s 表示空格 * 表示0次到多次
ifconfig ens33 | grep 'inet ' | sed -e 's/\s*inet //' | sed -e 's/\s*netmask.*//'

思考:
 ip addr 获取ip地址,怎么写?
 ip addr | grep ens33 |grep 'inet' | sed -e 's/\s*inet //' | sed -e 's/\/.*//'

6、split 文件切割

创造数据:拷贝一个/etc/services
cp /etc/services $PWD
mv services big.txt
ll  查看文件的大小

按照字节进行切割:
split -b 100k big.txt
split -l 3000 big.txt

查看大小:
du -h /home/scripts/datas/xaa   ==100k
ll
wc -c 文件名
删除所有的 x开头的文件
rm -rf ./x*

查看一个文件中有多少行
wc -l xaa

7、tr 替换和删除

tr  被替换的字符  新字符   是translate  的缩写

搞点数据:8.txt
laoyan
HELLO
abc12def34g

替换:

cat 8.txt | tr '[a-z]' '[A-Z]'

删除操作:

使用tr 进行一个单词计数的练习

9.txt
hello,world,hadoop
hive,sqoop,flume,hello
kitty,tom,jerry,world
hadoop
第一种方案:
[root@bigdata01 scripts]# cat 9.txt | tr ',' ' '|wc -w
12

第二种方案:

将单词中的,替换为换行符
cat 9.txt | tr ',' '\n'
//接着使用排序,去重等操作
cat 9.txt | tr ',' '\n' | sort | uniq 
// 接着可以进行单词重复记录的数据
cat 9.txt | tr ',' '\n' | sort | uniq -c

也可以这么写:
cat 9.txt | tr ',' '\n' | sort -u | wc -l

8、uniq 去重

uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用

造一些数据10.txt

张三    98
李四    100
王五    90
赵六    95
麻七    70
李四    100
王五    90
赵六    95
麻七    70

cat 10.txt | sort | uniq

9、tee 可以将数据输送到各个文件中 ,跟一个水管一样

cat 10.txt | sort | uniq -c  | tee a.txt b.txt c.txt

查看一个文件夹中所有文件的大小:
du -h *
或者
du -h -a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值