windows ubuntu:sed,awk,grep篇:4.执行 sed

目录

23.单行内执行多个 sed 命令

24.sed 脚本文件

25.sed 注释

26.把 sed 当做命令解释器使用

27.直接修改输入文件


23.单行内执行多个 sed 命令

第一章内已经讲过,单行内执行多个 sed 命令有多种方法。
1. 使用多命令选项 –e
多命令选项-e 使用方法如下:
sed –e ‘command1’ –e ‘command2’ –e ‘command3’
/etc/passwd 文件中,搜索 rootnobody mail:
$ sed -n -e '/^root/ p' -e '/^nobody/ p' -e '/^mail/ p' /etc/passwd
2. 使用 \ 折行执行多个命令
在执行很长的命令,比如使用-e 选项执行多个 sed 命令时,可以使用\来把命令折到多行
sed –n –e ‘/^root/ p’ \
-e ‘/^nobody/ p’ \
-e ‘/^mail/ p’ \
/etc/passwd
3. 使用{ }把多个命令组合
如果要执行很多 sed 命令,可以使用{ }把他们组合起来执行,如:
sed –n ‘{
/^root/ p
/^nobody/ p
/^mail/ p
}’ /etc/passwd

24.sed 脚本文件

如果用重复使用一组 sed 命令,那么可以建立 sed 脚本文件,里面包含所有要执行的 sed
令,然后用 -f 选项来使用。
首先建立下面文件,里面包含了所有要执行的 sed 命令。前面已经解释过各个命令的含义,
现在你应该知道所有命令的意思了。
$ vi mycommands.sed
s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1, \3/g
s/^.*/<&>/
s/Developer/IT Manager/
s/Manager/Director/
现在执行脚本里面的命令 :
$ sed -f mycommands.sed employee.txt
<John Doe,101, CEO>
<Jason Smith,102, IT Director>
<Raj Reddy,103, Sysadmin>
<Anand Ram,104, IT Director>
<Jane Miller,105, Sales Director>

25.sed 注释

sed 注释以 # 开头。因为 sed 是比较晦涩难懂的语言,所以你现在写下的 sed 命令,时间一长,
再看时就不那么容易理解了。因此,建议把写脚本时的初衷作为注释,写到脚本里面。如下
所示:
$ vim mycommands.sed
#交换第一列和第二列
s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1, \3/g
#把整行内容放入<>
s/^.*/<&>/
#Developer 替换为 IT Manager
s/Developer/IT Manager/
#Manager 替换为 Director
s/Manager/Director/
注意: 如果 sed 脚本第一行开始的两个字符是 #n 的话, sed 会自动使用 -n 选项 ( 即不自动打
印模式空间的内容 )

26.sed 当做命令解释器使用

一如你可以把命令放进一个 shell 脚本中,然后调用脚本名称来执行它们一样,你也可以把
sed 用作命令解释器。要实现这个功能,需要在 sed 脚本最开始加入 ”#!/bin/sed –f” 如下所
:
$ vi myscript.sed
#!/bin/sed -f
#交换第一列和第二列
s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1, \3/g
#把整行内容放入<>s/^.*/<&>/
#Developer 替换为 IT Manager
s/Developer/IT Manager/
#Manager 替换为 Director
s/Manager/Director/
现在,给这个脚本加上可执行权限 , 然后直接在命令行调用它 :
$ chmod u+x myscript.sed
$ ./myscript.sed employee.txt
<John Doe,101, CEO>
<Jason Smith,102, IT Director>
<Raj Reddy,103, Sysadmin>
<Anand Ram,104, IT Director>
<Jane Miller,105, Sales Director>
也可以指定-n 选项来屏蔽默认输出:
$ vim testscript.sed
#!/bin/sed -nf
/root/ p
/nobody/ p
/mail/ p
然后加上可执行权限,执行 :
$ chmod u+x testscript.sed
$ ./testscript.sed /etc/passwd
root:x:0:0:root:/root:/bin/bash
mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash
处于测试目的,把 testscript.sed 里面的 -n 去掉,然后再执行一次,观察它是如何运行的。
重要提示 : 使用 -n 时,必须是 -nf. 如果你写成 -fn, 执行脚本时就会获得下面的错误 :
$ ./testscript.sed /etc/passwd
/bin/sed: couldn't open file n: No such file or directory

27.直接修改输入文件

目前为止,你知道 sed 默认不会修改输入文件,它只会把输出打印到标准输出上。当想保存
结果时,把输出重定向到文件中 ( 或使用 w 命令 )
执行下面的例子之前,先备份一下 employee.txt 文件 :
$ cp employee.txt employee.txt.orig
为了修改输入文件,通常方法是把输出重定向到一个临时文件,然后重命名该临时文件 :
sed ‘s/John/Johnny/’ employee.txt > new-employee.txt
mv new-employee.txt employee.txt
相比这种传统方法,可以在 sed 命令中使用 -i 选项,使 sed 可以直接修改输入文件 :
在原始文件 employee.txt 中,把 John 替换为 Johnny:
$ sed -i 's/John/Johnny/' employee.txt
$ cat employee.txt
101, Johnny Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
再次提醒 : -i 会修改输入文件 。或许这正是你想要的,但是务必小心。一个保护性的措施是,
-i 后面加上备份扩展,这一 sed 就会在修改原始文件之前,备份一份。
在原始文件 employee.txt 中,把 John 替换为 Johnny ,但在替换前备份 employee.txt:
$ sed -ibak 's/John/Johnny/' employee.txt
备份的文件如下 :
$ cat employee.txtbak
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
修改后的原始文件为 :
$ cat employee.txt
101,Johnny Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
除了使用 -i, 也可以使用完整样式 –in-place. 下面两个命令是等价的 :
sed –ibak ‘s/John/Johnny/’ employee.txt
sed –in-place=bak ‘s/John/Johnny/’ employee.txt
最后,为了继续下面的例子,把原来的 employee.txt 还原回去 :
cp employee.txt.orig employee.txt

资料来源于《SedandAwk101Hacks》,大家有兴趣可以买一本,也可以关注我,我更新完它。

曾经,我花费大半月将它们跑完,现在啥都忘了,还是要常用。

只为学习交流,不为获利,侵权联系立删。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/583167.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于EBAZ4205矿板的图像处理:02生成测试彩条图像

基于EBAZ4205矿板的图像处理&#xff1a;02生成测试彩条图像 生成测试彩条图像可以有两种方式 VDMA缓存PS端生成彩条图像数据&#xff0c;PL端输出 这里可以直接看超级大电工开源的代码&#xff0c;写的很好详细&#xff0c;我就不再班门弄斧了&#xff08;下面是链接&#…

22 - Hadoop HA 高可用集群搭建、手动模式、自动模式以及HA模式集群

目录 1、HA 概述 2、HDFS-HA 集群搭建 2.1、HDFS-HA 核心问题 3、HDFS-HA 手动模式 3.1、环境准备 3.2、规划集群 3.3、配置 HDFS-HA 集群 3.4、启动 HDFS-HA 集群 4、HDFS-HA 自动模式 4.1、HDFS-HA 自动故障转移工作机制 4.2、HDFS-HA 自动故障转移的集群规划 4.…

AI助力后厨可视化智慧监管,让“舌尖安全”看得见

一、背景与需求分析 夏天是食物易腐败的季节&#xff0c;高温容易引发食品安全问题。在后厨环境中&#xff0c;食品安全问题可能涉及食品加工、后厨环境、食品是否被污染等方面&#xff0c;而不合格的食品安全管理可能导致食品中毒事件等风险&#xff0c;损害消费者的健康和餐…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

你的动漫AI女友 Anime gf :自定义创建各种独特个性、语言风格的虚拟角色

一个本地且开源的 CharacterAI 替代工具 Anime gf&#xff0c;提供了一个用户友好的界面&#xff0c;允许用户在桌面上与虚拟角色互动。你可以自定义创建各种角色&#xff0c;让每个虚拟角色都有自己的独特个性和语言风格&#xff0c;可以接入OpenAI、Anthropic、Mistral和 Tog…

建立外贸网站常用的WordPress插件

我们最近使用hostease的虚拟主机在创建wordpress外贸网站时&#xff0c;需要选择安装一些插件。对于wordpress建站选择合适的WordPress插件至关重要。面对琳琅满目的插件选择&#xff0c;根据多年的实践经验&#xff0c;我为您推荐以下必备插件清单&#xff0c;让您的网站建设更…

电商红利再现,“视频号小店”即将顶替“抖音小店”

哈喽~我是电商月月 电商行业发展迅速&#xff0c;除了“刚兴起”就入驻的商家&#xff0c;竞争少&#xff0c;市场大&#xff0c;能简简单单吃到第一批红利&#xff0c;后来入驻的商家就需要运用技巧与同行竞争了【要么认真选品&#xff0c;有独特的卖点。要么就是打价格战&am…

系统性文献综述的撰写(Systematic Review)

文献综述 什么是文献综述 对某一个“领域、专业、课题、问题、研究专题”&#xff0c;通过搜集大量的相关资料&#xff08;别人发表的论文&#xff09;&#xff0c;然后通过“阅读、分析、归纳、整理”给出最新进展、学术见解或建议。对其做出综合性介绍和阐述的一种学术论文…

基于SpringBoot和PostGIS的各省与地级市空间距离分析

目录 前言 一、PostGIS时空库 1、时空表设计 2、空间数据管理与查询 二、后台接口设计 1、ORM层设计与实现 2、业务层设计与实现 3、控制层设计 三、web可视化设计与实现 1、省份范围展示 2、城市距离可视化 3、成果展示 总结 前言 在上一篇博客中基于Java和GDAL实…

力扣HOT100 - 78. 子集

解题思路&#xff1a; class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> lists new ArrayList<>(); // 解集lists.add(new ArrayList<Integer>()); // 首先将空集加入解集中for(int i 0; i < n…

【nginx】http2 配置造成 多进程请求变成单进程

一、环境简要说明 #访问请求过程 用户&#xff08;浏览器&#xff09; ——> 防火墙映射 ——> nginx ——> app服务&#xff08;java&#xff09; http2是什么&#xff0c;简单来说是继HTTP1.1版本之后的新版HTTP协议&#xff0c;支持二进制分帧、多路复用、首部压缩…

认识Linux及一些基本

目录 linux简介&#xff1a; 1. 发展史 UNIX发展的历史 Linux发展历史 2. 开源 3. 企业应用现状 Linux在服务器领域的发展 Linux在桌面领域的发展 Linux在移动嵌入式领域的发展 Linux在云计算/大数据领域的发展 4. 发行版本 Debian Ubuntu 红帽企业级Linux Cent…

数据结构复习指导之数组和特殊矩阵

文章目录 数组和特殊矩阵 考纲内容 复习提示 前言 1.数组的定义 2.数组的存储结构 3.特殊矩阵的压缩存储 3.1对称矩阵 3.2三角矩阵 3.3三对角矩阵 4.稀疏矩阵 5.知识回顾 数组和特殊矩阵 考纲内容 &#xff08;一&#xff09;栈和队列的基本概念 &#xff08;二&a…

ubuntu neo4j 下载与配置(一)

neo4j 官方下载页面 https://neo4j.com/deployment-center/#community 进入页面之后&#xff0c;往下滑 咱们在下载neo4j时&#xff0c;官方可能要咱们填写一下个人信息&#xff0c;比如&#xff1a;姓名组织结构邮箱等&#xff1a; 咱们可以观察一下&#xff0c;ne4j的下载链…

iOS 实现类似抖音翻页滚动效果

这里是效果图 参考抖音的滚动效果&#xff0c;需要我们在结束拖动的时候&#xff0c;动画设置偏移量 这里有一个注意点&#xff0c;由于我们是在拖动结束的时候&#xff0c;手动改变tableview的偏移量&#xff0c; 改变了tableView 自身原有的的滚动效果&#xff0c;所以我们…

C++奇迹之旅:类和对象const成员static关键字友元内部类

文章目录 &#x1f4dd;const成员&#x1f320; const 成员函数是什么&#xff1f;&#x1f320; 取地址及const取地址操作符重载 &#x1f309;static成员&#x1f320;概念&#x1f320;static特性&#x1f309;static小题 &#x1f320;友元&#x1f309; 友元函数&#x1f…

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动 解决步骤&#xff1a; 1.去以下的目录中删掉.npmrc文件&#xff08;只在C:\User.npmrc&#xff09; 2.清除缓存&#xff0c;使用npm cache verify 不要用npm cache clean --force&#xff0c;容易出现npm WAR…

国产AI大模型加速“上车”

上海白领刘先生&#xff0c;坐上他的汽车主驾&#xff0c;向右扭头说&#xff1a;“打开那窗户。”话音刚落&#xff0c;副驾驶的车窗自动开了。 这辆车搭载了基于国产AI大模型的智能系统&#xff0c;就像有了人的大脑和神经网络&#xff0c;通过学习提升语音、视觉等多模态感…

VCSA6.7重置root密码

VCSA6.7重置root密码 1、登录VCSA所运行的ESXI主机 2、打开VCSA虚拟机Web控制台&#xff0c;先拍摄一个快照&#xff0c;然后重启虚拟机&#xff0c;在如下界面按"e" 3、找到linux开头的段落&#xff0c;在末尾追加rw init/bin/bash; 4、输入完成后&#xff0c;按&…

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …