文本三剑客—sed命令

2024-06-24 01:20
文章标签 命令 文本 三剑客 sed

本文主要是介绍文本三剑客—sed命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

sed命令

一、概念

sed是一种流编辑器,一次处理一行内容。

处理方式:一行一行处理,处理完当前行,才会处理下一行,直到文件末尾。

如果只是展示,会放在缓冲区(模式空间),展示结束之后,会从模式空间把操作结果删除。

二、sed的命令格式和操作选项

1、命令格式

sed -e ‘操作符1;操作符2’ 文件1 文件2

sed -e ‘操作符’ -e ‘操作符’ 文件1 文件2

-e 表示可以跟多个操作符,只有一个操作符,-e可以省略

2、操作选项

-e 用于执行多个操作命令

-f 在脚本中定义好了操作符,然后根据脚本内容的操作符对文件进行操作

-i 直接修改目标文件(慎用)

-n 仅显示script处理后的结果(不加-n,sed会有两个输出结果,加了-n之后就会把默认输出屏蔽,仅显示一个结果)

3、sed操作符

p:打印结果

r:使用扩展正则表达式

s:替换,替换字符串

c:替换,替换指定行

y:替换,替换单个字符,多个字符替换必须和替换内容的字符长度保持一致

d:delete 删除,删除行

a:增加,在指定行的下面一行插入内容

i:增加,在指定行的上面一行插入内容

r:在行后增加文本内容

$a:在最后一行插入新的内容

$i:在倒数第二行插入新的内容

$r:读取文本1的内容插入到文本2的最后一行

三、sed操作演示

1、打印功能

1.1 仅显示行号

sed -n '=' 文件

1.2 既显示行号又显示内容

sed -n '=;p' 文件

2、寻址打印

2.1 按照指定行打印

sed -n '行数p' 文本
或者
cat -n 文本| sed -n '行数p'

2.2 打印最后一行

sed -n '$p' 文本

3、行号范围打印

3.1 第几行到第几行

sed -n '行数,行数p' 文本

3.2 第几行和第几行

sed -n '行数p;行数p' 文本

3.3 打印奇数行和偶数行

奇数行 sed -n 'p;n' 文本
偶数行 sed -n 'n;p' 文本
# 这里n的作用跳过一行打印下一行

文本内容进行过滤

sed -n '/过滤内容/p' 文本
sed -n '/o/p' 文本 
# 过滤并打印包含o的行

使用正则表达式对文本内容进行过滤

sed -n '/^过滤内容/p' /etc/passwd
sed -n '/过滤内容$p' /etc/passwd
sed -n '/^root/p' /etc/passwd
# 打印/etc/passed下以root为开头的行sed -n '/bash$p' /etc/passwd
# 打印/etc/passed下以bash为结尾的行

从指定行开始,打印到第一个以bash为结尾的行

sed -n '指定行,/bash$/p' /etc/passwd

使用正则表达式打印出/etc/passwd下,出现两次99:的行

sed -rn '/(99:){2,}/p' /etc/passwd

要么以root为开头,要么以bash为结尾的行

sed -rn '/^root|bash$/p' /etc/passwd

sed的删除操作

sed -n '3d;p' 文本
# 删除第三行,打印剩余行
sed -n '5,$d;p' 文本
# 删除第五行到最后一行,打印剩余行

取反

sed -n '指定行数!;p'
# 除了指定行数,其他全部删除
sed -n '1!d;p' 文本
# 除了第一行,其他的全部删除
sed -n ‘4,6!d;p' test.txt
# 除了第四行到第六行,其他的全部删除
sed -n '4p;6!d;p' test.txt
sed -e '1,3d' -e '5d' -e'7,$d' test.txt
# 除第四行和第六行,其他的全部删除

匹配字符串删除行

sed '/任意内容/d' 文本
# 删除文本中含任意内容的文本sed '/指定内容1/,/指定内容2/d' 文本
# 删除文本中指定内容1到指定内容2的文本
vim test.txt 
#按行插入one、two、three、four、five、six、seven、eight、nine、tensed '/o/d' 文本
# 删除文本中含o的文本内容
sed '/one/,/six/d' 文本
# 删除文本中one到six的文本内容
sed '/o/!d' test
# 除了含o的,其余全部删除

s替换字符串

格式:'s/替换对象/替换内容/'
sed -n 's/替换对象/替换内容/p' /ect/passwd
sed -n 's/root/test/p' /etc/passwd
#替换第一个
sed -n 's/root/test/2p' /etc/passwd
#替换第二个
sed -n 's/root/test/gp' /etc/passwd
#替换全部

在文本内容前的空白处添加内容

sed -n 's/^/添加内容/p' test.txt
vim test.txt 
按行插入one、two、three、four、five、six、seven、eight、nine、ten
在文本的所有内容前的空白处添加#
sed -n 's/^/#/p' test.txt
在文本第四行到第六行前添加#
sed -n '4,6 s/^/#/p' test.txt
在文本第四行和第六行前添加#
sed -n '4s/^/#/p;6s/^/#/p' test.txt

文本首字母转换大小写,符号u&和l&,\转义符

#文本内容 abc
加g,全部变成大写
sed -n 's/[a-z]/\u&/' 文本
Abcsed -n 's/[a-z]/\u&/g' 文本
ABC#文本内容ABC
sed -n 's/[A-Z]/\l&' 文本
aBCsed-n 's/[A-Z]/\l&g'
abc

整行替换

sed '/替换对象/c 替换内容' 文本
sed '/one/c dn zhen de shuai' 文本

替换ip地址

y单字符替换

sed 'y/替换对象/替换内容/' 文本
sed 'y/one/111/' 文本

使用sed命令对字符串和字符的位置进行互换

echo abc | sed -r 's/(a)(b)(c)/\3\2\1/'
cba 
echo 你好中国| sed -r 's/(.)(.)(.)(.)/\3\4\1\2/'
中国你好

sed的主要内容:对文本内容进行增、删、改查

拓展:

1、如何免交互删除文本内容,不删除文件?

方法一:sed -i 'd' 文本
方法二:cat /dev/null > 文件
方法三:echo ' ' > test1.txt 
#方法三为虚假删除,只是把空格输入到文本,实际上并未删除,查看文本内容为空格

2、如何免交互删除空行

grep -v "^$" 文本
cat 文本 | tr -s 文本
sed '/^$/d' 文本

3、替换ip地址

sed 'y/替换对象/替换内容/' 文本
sed 'y/one/111/' 文本

这篇关于文本三剑客—sed命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088795

相关文章

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者