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

shell编程之sed

sed 是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed 命令处理缓冲区中的内容,处理完成 后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变。

sed基本语法

sed OPTIONS… [SCRIPT] [INPUTFILE…]
常用的选项:
-n --quiet --silent :不输出模式空间中的内容,使用安静模式,在一般 sed 的用法中,所有来自STDIN的数据一般都会被列出到屏幕上,但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行才会被列出来;
-i :直接编辑原文件,而不是由屏幕输出,默认不对原文件进行操作;
-e :直接在命令行模式上进行 sed 的动作编辑,多个子命令之间也可以用分号隔开; sed - e
'command1 ; command2...' filename 或者 sed - e 'command1' - e 'command2' ……filename
-r :使用扩展正则表达式;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以执行 filename 内的 sed 动作。

模拟空间的编辑操作

地址定界

 

练习题grep及sed

grep "bash$" /etc/passwd

grep -E"[0-9]{3,4}" /etc/passwd

grep -E"^\s+.+" /etc/grub2.cfg

netstat -tan  grep -E "LISTEN\S*$

fdisk -lgrep -E '/dev/(sd hd)[a-2]

ldd /usr/bin/cat grep -o "/.*/.*\s"

echo /root/ce/lk.txt | grep -oE '/[^/]+' | sed -nr '3 s%/([^/]+)%\1% p'

grep -E "^(.+):.*\1$" /etc/passwd

14.
grep '#[[:space:]]\{1,\}[^[:space:]]' /etc/fstab

15.
grep '\<to.*to\>' /etc/rc.d/rc.local
sed -n '/to.*to/ p' /etc/rc.d/rc.local

16.
grep '\bs.*d\b' /etc/inittab

17.
ifconfig | grep -oE '([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'

18.
grep -E 'Failed|FAILED' /var/log/secure
awk '/(Failed|FAILED)/ {print $0}' /var/log/secure
sed -n '/(Failed|FAILED)/p' /var/log/secure

19.
grep 'bash$' /etc/passwd

 

1.
vim /root/test.txt
sed -p /root/test.txt
2.
sed -n '3~10 p' /root/test.txt
awk 'NR>=3&&NR<=10 {print $0}' /root/test.txt
3.
sed -n '/root/p' /root/test.txt
4.
sed -n '15~$ d' /root/test.txt 
5.
sed '/bash/d' /root/test.txt 
6.
sed -n 's/root/toor/gp' /root/test.txt 
7.
sed -n's@/sbin/nologin@/bim/login@g' /root/test.txt 
8.
sed -n '5,10 s/[0-9]//gp' /root/test.txt 
9.
sed -n 's/[^a-zA-Z0-9]//gp' /root/test.txt
10.
sed '20,$s/^.*$/aaa:&/g' test.txt
11、复制/etc/grub2.cfg到/root/grub2.cfg,删除文件中所有以空白开头的行行首的空白字符;
[root@localhost ~]# sed 's/^[[:space:]]//' grub2.cfg
12、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[root@localhost ~]# sed 's/^#[[:space:]]*//' /etc/fstab
13、给文件/root/anaconda-ks.cfg每一行行首增加#号
[root@localhost ~]# sed 's/^.*$/#&/' /root/anaconda-ks.cfg
14、在/etc/fstab文件中不以#开头的行的行首增加#号;
[root@localhost ~]# sed 's/^[^#]/#&/' /etc/fstab
15、处理/etc/sysconfig/network-scripts/路径,使用grep和sed命令取出其目录名和基名
[root@localhost ~]# echo "/etc/sysconfig/network-scripts/" |sed -r
's#^/(.*)/(.*)/#\1#' etc/sysconfig
[root@localhost ~]# echo "/etc/sysconfig/network-scripts/" |sed -r
's#^/(.*)/(.*)/#\2#'
network-scripts
[root@localhost ~]# echo "/etc/httpd/conf.d/host.conf" | sed -r 's#(^/.*/)[^/].*#\1#'
/etc/httpd/conf.d/
[root@localhost ~]# echo "/etc/httpd/conf.d/host.conf" | sed -r
's#^/.*/([^/].*)#\1#'
host.conf
[root@localhost ~]# basename /etc/httpd/conf.d/host.conf
host.conf
[root@localhost ~]# dirname /etc/httpd/conf.d/host.conf
/etc/httpd/conf.d
[root@localhost ~]# echo "/etc/sysconfig/network-scripts/"|grep -o -E "
[^/]+/?
$"|grep -o -E "^[^/]+"
network-scripts
[root@localhost ~]# echo "/etc/sysconfig/network-scripts/"|grep -o -E "
(^/([^/]+/)*[^[:space:]])|^/"|grep -o -E "^/([^/]+/)*"|grep -o -E "
(/[^/]+)+|^/"
/etc/sysconfig
16、利用sed 取出ifconfig命令中本机的IPv4地址
[root@localhost ~]# ifconfig |sed -n '2p' | sed -r "s/.*inet[[:space:]]*//"
|
sed -r "s/[[:space:]]*netmask.*//"
192.168.168.128
17、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
[root@localhost ~]# ls /mnt/Packages/|grep "rpm$"|sed -r 's@.*\.
(.*)\.rpm@\1@'|sort|uniq -c
1085 i686
1216 noarch
2319 x86_64

1.
sed -i 's/^[[:space:]]\+//' /etc/grub2.conf
2.
sed -i 's/^#[[:space:]]\+//' /etc/fstab
3.
sed -i 's/^/#/' /root/install.log
4.
sed -i '/^[^#]/s/^/#/' /etc/fstab
5.
ifconfig | sed -n '/inet /{s/^.*inet \(.*\) 
netmask.*/\1/p}'
6.
- 临时关闭(重启后失效):setenforce 0
- 永久关闭(需要修改配置文件):编辑 /etc/selinux/
config 文件,将 SELINUX=enforcing 或 SELINUX=
permissive 修改为 SELINUX=disabled 。
7.
vi /etc/hosts


http://www.kler.cn/a/408430.html

相关文章:

  • Java算法OJ(10)哈希表练习
  • HDR视频技术之三:色度学与颜色空间
  • C++注释
  • 10-单表查询
  • 【工具变量】中国省级及地级市保障性住房数据集(2010-2023年)
  • 【ChatGPT】如何设计问题让ChatGPT生成创意写作内容
  • 探索 Python 任务自动化的新境界:Invoke 库揭秘
  • 如何用Python统计Excel文件中的特定字段数量
  • 【Java系列】随机生成大小写混合的卡密
  • 大数取模 详解
  • Redis除了做缓存,还能做什么???
  • 密码系统设计实验3-2
  • SQLite 管理工具 SQLiteStudio 3.4.5 发布
  • C语言中的指针和字符串的赋值
  • 3.13MayBeSomeJava that are BUTTON and listener
  • 基于网页的大语言模型聊天机器人
  • java中的最小堆
  • 深入理解 Seata:分布式事务的最佳解决方案
  • Vue.js 学习总结(15)—— 如何快速删除 node_modules 依赖文件
  • springboot实战(17)(“大事件“——新增文章主体逻辑)
  • MySQL的DELETE(删除数据)详解
  • JavaSE 总复习:夯实基础,迈向进阶之路
  • LeetCode 4.寻找两个中序数组的中位数
  • 鸿蒙进阶篇-状态管理之@Provide与@Consume
  • Linux系列-僵尸状态
  • Java基于SpringBoot+Vue的藏区特产销售平台