您当前的位置: 首页 >  linux

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux sed命令使用笔记

ITKEY_ 发布时间:2022-03-19 20:52:34 ,浏览量:0

sed 通常用于过滤文本,即它接受文本输入,对其执行一些操作(或一组操作),然后输出修改后的文本。sed 通常用于使用模式匹配或替换文件中多次出现的字符串来提取文件的一部分。

Linux sed 命令是利用脚本来处理文本文件。 sed 可依照脚本的指令来处理、编辑文本文件。 Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

使用场景

我就讲讲我本来的使用场景,我使用最多的场景就是编写shell脚本时会用到。使用sed可以自动化的编辑一些文本文件。

官方帮助文档

https://www.gnu.org/software/sed/manual/sed.html

语法
sed [-hnV][-e][-f][文本文件]

参数说明:

  • -e--expression= 以选项中指定的script来处理输入的文本文件。
  • -f--file= 以选项中指定的script文件来处理输入的文本文件。
  • -h或–help 显示帮助。
  • -n或–quiet或–silent 仅显示script处理后的结果。
  • -V或–version 显示版本信息。

动作说明:

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
示例 ubuntu切换国内的源

一般情况下,将 /etc/apt/sources.list 文件中 Ubuntu 默认的源地址 http://archive.ubuntu.com/ 替换为 http://mirrors.ustc.edu.cn/ 即可。 如果手动编辑,要输入很多指令,还会出错操作失误。

使用sed一行命令就可以实现了。

sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

这样就非常的方便。

删除文件中的第 4 行
sed '4d' input.txt > output.txt
在第 10-20 行将所有出现的 ‘hello’ 替换为 ‘world’
sed '10,20s/hello/world/' input.txt > output.txt
仅打印输入文件的第 45 行
sed -n '45p' file.txt
多个文件拼在一起输出1到20行
sed -n '1,20p' one.txt two.txt three.txt
输入指定字符结尾的行
sed -n '/bash$/p' /etc/passwd
Id删了指定字符结尾的行

input.txt内容如下;

boy
dog
girl
phone
age
sed '/dog$/Id' input.txt

删除命令: Id

i指定位置插入文本

input.txt内容如下;

a
b
c

要在b上面一行加个java

sed '/b/ijava' input.txt

a java b c 基中i为插入指令java是插入的值

c将第 2 到第 9 行替换为单词 ‘hello’
seq 10 | sed '2,9c hello'
1
hello
10

命令c替换文本

整段文本的处理

处理段落等文本块(而不是逐行)的常用技术是使用以下构造:

sed '/./{H;$!d} ; x ; s/REGEXP/REPLACEMENT/'

第一个表达式/./{H;$!d}对所有非空行进行操作,并将当前行(在模式空间中)添加到保持空间。在除最后一行之外的所有行上,模式空间都被删除并重新开始循环。 其他表达式x和s仅在空行(即段落分隔符)上执行。该x命令将累积的行从保持空间取回模式空间。然后该 s///命令对段落中的所有文本(包括嵌入的换行符)进行操作。 示例:

$ cat input.txt
a a a aa aaa
aaaa aaaa aa
aaaa aaa aaa

bbbb bbb bbb
bb bb bbb bb
bbbbbbbb bbb

ccc ccc cccc
cccc ccccc c
cc cc cc cc

$ sed '/./{H;$!d} ; x ; s/^/\nSTART-->/ ; s/$/\n
a a a aa aaa
aaaa aaaa aa
aaaa aaa aaa

bbbb bbb bbb
bb bb bbb bb
bbbbbbbb bbb

ccc ccc cccc
cccc ccccc c
cc cc cc cc
            
关注
打赏
1665243900
查看更多评论
0.0396s