本文介绍: 1.sed 命令是一个流编辑器可以逐行读取文件,也可以执行命令操作,因此如果文件过大,有必要先将其分割然后再传递给 sed 进程。2.sed -r 是正则表达式“Ⅾ{n}Ⅾ{n,m}Ⅾ”的扩展,去掉了”Ⅾ”。3.使用 -i 命令时,一定要先备份(尤其是重要文件)或做实验,确保没有错误后再使用 -i。4.sed 命令集中于四种功能添加删除更改检查,在脚本用于更改设置添加重要文件时特别有效。

一、sed

1.1 sed是什么

sed 是一种流编辑器stream editor),用于文本数据进行文本转换处理。它通常被用于命令行中执行文本编辑任务,可以对输入的文本进行搜索替换删除操作,并将结果输出sed 是一个非交互式的文本处理工具,它按行逐步处理输入流的数据。

1.2 基本用法

格式:
sed [选项] '语法' [标准输入]
sed选项
选项 含义
-n 关闭自动打印
-i 实际修改文本的内容
-r 显示扩展正则表达式
-i.bak 实际修改前先备份源文件
-e 多点编辑

注意:

-ir 不支持
-i -r 支持
-ri   支持

-ni   会清空文件

 默认打印已输入的内容

查看文件内容

 重定向

管道

 1.3 搜索替代

s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符g 行内全局替换
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小

 简单用法

高级用法 

 分组查找替换

格式
sed 's///'

 分组后向引用

提取ens33的IP地址

 提取文件的权限(要求数字

提取网卡

echo /etc/sysconfig/network-scripts/ifcfg-ens33 | sed -n 's@.*/([^/]*)$@1@p'
echo "/etc/sysconfig/network-scripts/ifcfg-ens33"|sed -nr 's#^.*/(.*)#1#p'
echo /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -nr 's@^(.*)/([^/]+)@2@p'

 提取版本号

用sed提
[root CXK /opt] cat test |sed -rn 's/.*-(.*).jar/1/p'

grepcat test |grep -e "[0-9]+."

 1.4 脚本格式

sed ‘ ‘单引号里面要写脚本

脚本格式如下
1. 不给地址:对全文进行处理(比如行号)
2. 单地址:
   #:指定的行,$:最后一行
   /pattern/:被此处模式所能够匹配到的每一行正则表达式
3. 地址范围:
   #,#     #从#行到第#行,3,6 从第3行到第6行
   #,+#   #从#行到+#行,3,+4 表示从3行到第7行
   /pat1/,/pat2/    第一个正则表达式第二个正则表达式之间的行
   #,/pat/  从#号行为开始找到 pat为止 
   /pat/,#  找到#号个pat为止
4. 步进:~
     1~2 奇数行
     2~2 偶数行
sed -n 'n;p' testfile1		#打印偶数行
ed -n '2,${n;p}' testfile1
字母语法
符号 含义
p 手动打印
q 提前退出
d 删除
a 后面追加
i 上面插入
c 替换
! 取反
= 显示行号

选项关闭自动打印功能

 直接显示第三行

显示最后一行

 正则表达式

显示范围

 

匹配两个正则表达式之间的行

基本格式     ‘/表达式1/,/表达式2/p’ (不要忘记打印)p  文件名

 显示从几点几分到几点加分的日志

sed '/10:40/,/11:30/p' /var/log

删除

 

追加

 

取反

 1.5 变量

 

1. 6 修改网卡名

vim /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
#GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0"
#修改这行
GRUB_DISABLE_RECOVERY="true"


sed -ri.bak '/^GRUB_CMDLINE_LINUX/s#(.*)"$#1 net.ifnames=0"#' /etc/default/grub 

sed -ri.bak '/^GRUB_CMDLINE_LINUX/s#"$#net.ifnames=0"#' /etc/default/grub


grub2-mkconfig -o /boot/grub2/grub.cfg 

二、免交互

2.1 多行重定向

cat &gt;test <<tof

tee <<eof

2.2 expecp

 要先安装expect软件

rpm -q expect
yum -y install ecpect
格式
expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
脚本格式
#!/usr/bin/expect
spawn #开启免交互 开启expect
expect #捕捉屏幕上的关键字
exp_continue #继续捕捉屏幕上的字
send #发送指令
insteract #代表退出expect但是会留在新终端
expect eof 代表退出expect ,默认保留10s然后退出

 实验1:

验证

 

实验2: 

总结

1.sed 命令是一个流编辑器,可以逐行读取文件,也可以执行命令操作,因此如果文件过大,有必要先将其分割然后再传递给 sed 进程

2.sed -r 是正则表达式“Ⅾ{n}Ⅾ{n,m}Ⅾ”的扩展,去掉了”Ⅾ”。

3.使用 -i 命令时,一定要先备份(尤其是重要文件)或做实验,确保没有错误后再使用 -i。

4.sed 命令集中于四种功能–添加、删除更改检查,在脚本用于更改设置或添加重要文件时特别有效。

5.交互式操作对用户实施单一设置很有用,但在面对批量配置需要脚本访问免交互类型脚本来解决其实施问题

6.对于检查工具使用,应修改脚本解释器语句,或使用嵌入式(但不适合 ssh、su 等能够改变运行环境嵌入式交互场景命令)。

7.编写无交互脚本需要首先考虑交互过程中所有可能的交互要素,以保证脚本的实用性和完整性。

原文地址:https://blog.csdn.net/Cnm_147258/article/details/134670809

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_5629.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注