首页 > 其他分享 >sed命令基础

sed命令基础

时间:2022-08-25 17:26:26浏览次数:67  
标签:ab abc bcd 基础 命令 sed txt 替换

sed命令基础

sed编辑器

sed编辑器被称作流编辑器(stream editor)。
流编辑器会在编辑器处理数据之前,基于预先提供的一组规则来编辑流。(说人话就是把输入的内容处理一下得到你想要的内容再输出)

那如何得到想要的结果那,接着往下看。


sed命令格式如下

sed options script file

下面分别介绍几部分可以填的内容

options

选项 描述
-e script 在处理输入时,将script中的命令添加到已有的命令中
-f file 在处理输入时,将file中指定的命令添加到已有的命令中
-n 不产生命令输出,使用print命令来完成输出
-r,-R 使用扩展正则表达式语法
-i 直接修改原文件(必须包含file部分)

file

要读取的文件

# 输入
$ sed 's/root/a/' 1.tx

# 输出
PID   USER     TIME  COMMAND
    1 a      0:00 init
    2 a      0:00 [kthreadd]
    3 a      0:00 [kworker/0:0-eve]
    4 a      0:00 [kworker/0:0H-kb]
    5 a      0:00 [kworker/u2:0-ev]
    6 a      0:00 [mm_percpu_wq]

# 本例子中使用的s命令是把第一个root替换成a

script

这里的情况比较多所以放在了最后一点来说

替换标记

上一小点中我们已经说了s替换命令的使用,替换命令在替换多行文本时是可以正常实现的,但是默认情况下它只会替换每一行的第一处。
如果想让替换命令替换一行中的不同位置,这就需要用到替换标记

一共有4种替换标记

标记 作用
数字 表明新文本替换行内第n处匹配到的位置
g 表明新文本将会替换行内所有匹配到的内容
p 表明要把修改后的内容行打印出来
w file 把替换好的内容写到文件file中

让我们通过4个例子来分析

# 1.txt
ab abc bcd def
abc ab bcc abd
# 输入
$ sed 's/ab/**/2' 1.txt
# 输出
ab **c bcd def
abc ** bcc abd
# 1.txt
ab abc bcd def
abc ab bcc abd
# 输入
$ sed 's/ab/**/g' 1.txt
# 输出
** **c bcd def
**c ** bcc **d
# 输入
$ sed 's/def/*/p' 1.txt
# 输出
ab abc bcd *
ab abc bcd *
abc ab bcc abd

# 如果配合上-n选项禁止输出,就会只输出修改过的内容

# 输入
$ sed -n 's/def/*/p' 1.txt
# 输出
ab abc bcd *
# w标记产生的效果,何-n配合p标记的结果是一样的,不过是将输出保存到指定文件中
# 输入
$ sed 's/def/*/w 2.txt' 1.txt
# 输出
ab abc bcd *
abc ab bcc abd
# 2.txt
ab abc bcd *

特殊字符的替换

会有一些比较特殊的字符出现扰乱我们原本的处理方式,比如(/)
想要使用/我们需要使用转义字符

# 输入
$ echo '/bin/bash' | sed 's/\/bin/\/user\/bin/'
# 输出
/user/bin/bash

这通常会带来一些疑惑和错误(反正我不会这么写)
要解决这个问题我们来看下一个例子,sed允许我们使用其他字符来替换原有的(/)分隔符

# 输入
$ echo '/bin/bash' | sed 's#/bin#/user/bin#'
# 输出
/user/bin/bash
# 注意调换后分隔符一致就可以,它可以用绝多数内容进行分割包括字符和数字
# 不过个人感觉还是用比较明显的字符看起来会舒服一下

使用地址

默认情况下,sed命令会作用于数据的所有行,如果想将命令作用与特定行或某些行,则必须用行寻址(line addressing)

有两种形式的行寻址
两种形式都使用相同的模式来指定地址

[address]command
或
address {
	command1
	command2
	command3
}

1、以数字形式表示行区间

当使用数字的方式行寻址的时候,sed编辑器会将文本的第一行记为编号1,
然后继续按照顺序进行接下来分配行号。

# 指定第5行
$ sed '5s/root/a/' 1.txt
# 指定区间2到5行
$ sed '2,5s/root/a/' 1.txt
# 如果想要从n行到行末,但又不知道最后一行时第几行,使用$
$ sed '2,$s/root/a/' 1.txt

2、用文本模式来过滤出行

这种方法会相对复杂一些,必须使用如下格式
/pattern/command
命令会只作用到符合pattern的行上


未完待续...

标签:ab,abc,bcd,基础,命令,sed,txt,替换
From: https://www.cnblogs.com/foreverW/p/16624935.html

相关文章

  • Caused by: java.lang.UnsupportedClassVersionError: com/hfplm/handler/HFEBOMation
    Causedby:java.lang.UnsupportedClassVersionError:com/hfplm/handler/HFEBOMationHandlerhasbeencompiledbyamorerecentversionoftheJavaRuntime(classf......
  • python基础-GIL
    python速度慢的原因动态类型语言,边解释边执行GIL,无法利用多核CPU并发执行GIL同步线程的一种机制,使得任何时刻仅有一个线程在执行。在多核心处理器上,使用GIL的解释器......
  • python基础-垃圾回收机制
    1.主)引用计数(referencecounting)引用计数为0时,该对象生命就结束了。维护引用计数消耗资源,循环引用L.append(L)L一直不回收(辅)标记清除机制(markandsweep)**目的:**解决......
  • git常用命令
    初始化git仓库:gitinit关联远程仓库:gitremoteaddorigin********查询关联的远程仓库:gitremote-v删除关联的远程仓库:gitremotermorigin提交当前项目代码到暂存......
  • 窗口部件-基础窗口部件 QWidget
    1基础窗口部件QWidgetQWidget类是所有用户界面对象的基类,被称为基础窗口部件.不多废话直接看代码main.cpp如下#include<QtWidgets>intmain(intargc,char......
  • CSP基础知识(汇总)
    目录linux基础命令进制转换排序算法原码、补码、反码、计算运算符linux基础命令ls--查看当前目录下所有文件cd--切换目录cp--复制文件mv--移动文件touch--建立新......
  • 汇编基础
    寄存器处理器总是很繁忙的,在它操作的过程中,所有数据在寄存器里面都只能是临时存在一会儿,然后再被送往别处,这就是为什么它被叫做“寄存器”的原因早期的处理器,它的寄存......
  • ItemRank: A Random-Walk Based Scoring Algorithm for Recommender Engines
    目录概符号说明本文方法GoriM.andPucciA.ItemRank:arandom-walkbasedscoringalgorithmforrecommenderengines.InInternationalJointConferencesonArt......
  • python基础——函数
    函数函数就是将一段具有独立功能的代码块整合到一个整体并命名在需要的位置调用这个名称即可完成对应的需求。函数在开发过程中,可以更高效的实现代码重用。先定义后......
  • iOS开发入门基础篇
    iOS开发入门 任何C源程序,不经修改,即可通过Objective-C编译器成功编译Objective-C源程序中可以直接使用任何C语言代码除了面向对象有语法是SmallTalk风格的(下面会讲到),其......