sed - 3 Delete command

前篇回顾
sed - 简介 读取编辑文字档的好工具
sed - 2 Pattern

今天来聊一下sed的编辑功能, 毕竟sed是Stream Editor;
主要command功能就还是新增, 删除, 修改, 输出

新增, 大概能想的到

  • a(append) 在匹配行後面新增
  • i(insert) 在匹配行前面新增
  • r(append from file) 读取外部文件, 在匹配行後面新增
  • w(write the current pattern space to file) 从pattern space把匹配行讯息给写到外部文件的尾巴

删除

  • d (delete)

修改

  • c 把匹配行换成新的文本内容
  • s 取代指定匹配到的字串, 变成新字串

先聊删除功能, 因为就一个delete
s也能作到类似删除的功能, 之後再说

删除

重要

首先拿/etc/passwd来玩, 但是我们玩备份的这档案, 别玩etc底下的, 玩完系统就崩溃了

# 复制passwd 到当前目录
cp /etc/passwd ./
  • 删除指定行数
# 指定第1行做删除
nl passwd | sed '1d'
>     2	daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
>     3	bin:x:2:2:bin:/bin:/usr/sbin/nologin

但再看一次passwd内容, 原本的第一行root还是在

nl passwd 
>     1	root:x:0:0:root:/root:/bin/bash
>     2	daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin****

复习一下sed预设不改变原始文件, 只改变pattern space的内容
这里要直接改变原文件要加上-i(edit file in place)

sed -i '1d' passwd

前一篇介绍的一些行定位方法, 这里都能用
也能搭配字串匹配的方式做操作.

更多删除案例

准备资料

cat > os.txt <<EOF
> Windows
> Linux
> Android
> OS
> EOF
  • 删除匹配到的行
nl os.txt | sed '/OS/d' 
>     1	Windows
>     2	Linux
>     3	Android
  • 删除空白行
    空白行, 在Regex内会用^$, ^表示begin of a line, $表示end of the line
    中间我们都没写任何东西, 就表示这行啥都没有, 空的.
cat > os.txt <<EOF
> Windows OS os!
> Linux Os os
> 
> Android
> 
> OS
> EOF

sed '/^$/d' os.txt     
> Windows	OS OS!
> Linux OS OS!
> Android
> OS
  • 删除匹配到的行, 跟和往後的2行
nl os.txt | sed '/Linux/,+2d' 
>     1	Windows
  • 删除一行内重复出现2次匹配字串的行
    准备资料
cat > os.txt <<EOF
> Windows OS os!
> Linux Os os
> Android
> OS
> EOF

直觉想法, 把一行内匹配到第二次的给换成指定字串;
然後在一次sed, 把匹配到指定字串的给删除
2则表示匹配到的第二个

sed 's/OS/del/2' os.txt    | sed '/del/d'
Android
OS
# os.txt
> Windows OS      os 
> Linux Os os
> Android
> OS
> EOF

cat -T os.txt 
# 可以看到^I就是了tab
> Windows OS^Ios
> Linux Os os
> Android
> OS

想法是把行内有不满足可以[:print:]的都删除, 跟上面案例的^有所不同
这里的是用到Regex的[^...], 在中括号内, 表示匹配指定字元之外的任何内容
[^[:print:]]

sed '/[^[:print:]]/d' os.txt
> Linux Os os
> Android
> OS

----参考来源
Negated Character Classes


<<:  [Day11] Storybook - Controls

>>:  Day26 ( 游戏设计 ) 猴子接香蕉

Swift纯Code之旅 Day19. 「ViewController好乱(1) - MVC介绍)」

前言 做到现在会发现每个ViewController内的程序码都一大堆,有画面元件,有逻辑,有Mod...

2.4.8 Design System - Icon

因为疫情的关系 体会到很多事情都要持之以恒 在突然被打乱的生活节奏中 要怎麽找回另一个习惯的步调 ...

伸缩自如的Flask [day 21] Nginx with https

为了网页服务的安全性,我们需要将提供的HTTP协定页面,透过 SSL/TLS加密,升级成HTTPs。...

六顶思考帽子的作用是什麽?

六个思考帽是着名学者爱德华·德·波诺(Edward de Bono)提出的思考工具,代表了六个不同的...

Day08 建造APP(2)

昨天我们打完指令,Welcome的资料夹神奇的出现後,你应该会有个冲动想要把他打开来一看究竟吧! 那...