shell-------sed,grep,awk

本文详细介绍Linux环境下使用sed、awk、find等工具进行文本处理的方法,包括文件内容替换、字符添加、数据排序及筛选等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

替换文件内容

sed ‘s/192/168/g’ test.txt 将192替换成168 这个只是预替换,其实真正的文件是没有被替换的
sed -i ‘s/192/168/g’ test.txt 加上 " -i " 文件里的内容是被替换成功的

在文件开头或结尾添加字符

sed ‘/liuchuang/i ################’ oooooooooo.txt 这个意思是在文件内容开头加入 " i " 指的是文章开头
sed ‘/liuchuang/a ################’ oooooooooo.txt 这个意思是在文件内容末尾加入 " a " 指的是文章开头

打印某一行内容

[root@vovo1 ~]# sed -n ‘/liuchuang/p’ oooooooooo.txt 加入 “ -n ” “ p ” 的意思打印 也就是 print
my name is liuchuang

按顺序打印,或者指定某一行打印

[root@vovo1 ~]# sed -n ‘1p’ oooooooooo.txt
#name info
[root@vovo1 ~]# sed -n ‘1,5p’ oooooooooo.txt
#name info
##############
#######
my name is liuchuang
tset

如何在一组数据中打印出最大和最小的数据。
 [root@vovo1 ~]# cat shuzi.text              首先是查看文件的数据情况          
132213
2222
333
44121 131
1313123313
222
444
[root@vovo1 ~]# cat shuzi.text |sed 's/ /\n/g'       在这里将杂乱文章的数据排列,变成一个列表     
132213							重点:  在sed 里边 "sed 's/ /\n/g "  里边  “ \n ” 代表换行符。 		    
2222								而这个总体的命令意思就是将空的地方换成换行符
333
44121
131
1313123313
222
444
[root@vovo1 ~]# cat shuzi.text |sed 's/ /\n/g' | grep -v "^$" |sort -nr              
1313123313								 sort 本身就是进行排序的,而sort  -nr   意思为将所有的数据从	大到小排序
132213								grep  -v   是排除的意思,而后边加上 “ ^$”   在语句里边  “ ^  ” 意思为以什么为开头    “ $ ”  意思为以什么为结尾
44121
2222
444
333
222
131
[root@vovo1 ~]# cat shuzi.text |sed 's/ /\n/g' | grep -v "^$" |sort -nr | sed -n '1p;$p'           
1313123313							而最后的在使用sed  -n 指定打印,而此时打印的1p 就是最大的数字,而$p  指的就是最后一行。 $  就是最后一个
131

grep 正则表达式。反斜杠,匹配,

以什么开头或者以什么结尾

[root@vovo1 ~]# grep "^172" oooooooooo.txt           正则表达式中以**开头的。在这里举例以172开头的 匹配出来   “ ^ ” 意思为以什么开头的    
172.25.254.11
172.25.254.22
[root@vovo1 ~]# grep "11$" oooooooooo.txt 			   正则表达式中以**结尾的。在这里举例以11结尾的 匹配出来   “$ ” 意思为以什么结尾的    
172.25.254.11
awk
[root@vovo1 ~]# cat /etc/passwd | sed 's/:/ /g' |awk '{print $1}'         打印出每一行的内容
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-bus-proxy
systemd-network
dbus
polkitd
tss
postfix
sshd
apache 

在我们的awk中,可以使用awk筛选,而空格是域,一般在筛选的时候,如有其他的符号可以先将其他的符号换成空格,然后在用awk筛选,

[root@vovo1 ~]# cat jj.sh              
my name is liuchuang
[root@vovo1 ~]# cat jj.sh  | awk '{print $NF}'   				awk '{print $NF}'  这句话的意思为某一行的最后一个  print $NF打印最后一个
liuchuang
[root@vovo1 ~]# cat jj.sh  | awk '{print $NF}' | sed 's/^/&01/'			在liuchuang前面加01,可以使用sed在后边直接,或者直接使用awk自身所带的awk '{print "01: "$NF}'  直接在其中双冒号加入所需要加入的东西
01liuchuang
[root@vovo1 ~]# cat jj.sh  | awk '{print $NF}' | sed 's/^/&01: /'     
01: liuchuang
[root@vovo1 ~]# cat jj.sh  | awk '{print "01: "$NF}'
01: liuchuang

find
find . -maxdepth 1 -type f -name "*.txt"  -mtime + 30            -maxdepth 级别查看,后边跟个1 意思为第一级别, -type 意思是什么类型,后边跟的是f  意思是文件,d  的意思是目录,  -name  以名称寻找,后边跟着条件,-mtime 多久时间可以修改。后边加+30 的就是30天之前的文件
find . -maxdepth 1 -type f -name "*.txt"  -mtime -1    意思一天之内可以修改的\
find . -maxdepth 1 -type f -name "*.txt"  -mtime -1  -exec rm -rf {} \;      删除可以修改的
[root@vovo1 ~]# find . -maxdepth 1 -type f -name "*.txt"  -mtime -3 -exec cp {} /mnt/ \;        复制三天前的文件,到/mnt目录下
[root@vovo1 ~]# ll /mnt/list.txt 
-rw-r--r-- 1 root root 129 Oct 24 21:32 /mnt/list.txt

移动指定大小的文件

[root@vovo1 ~]# find . -maxdepth 1  -size +1M -type f -exec mv {} /mnt/ \;
整体的意思为移动当前一级目录大于1M的文件到/mnt目录下   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值