Linux指令 sed 用法详解

简介

Linux sed 命令是利用脚本来处理文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等,该指令可以不用打开文件直接编辑指定行,适用于超大文件的编辑、全自动编辑等场景。

语法结构

语法格式: sed [-nefri] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
 
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,其中$代表最后一行,指定行还支持正则表达式筛选,这个非常适用,比如如果我的动作是需要在 10 到 20 行之间进行的,则  '10,20[动作行为]'
 
function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
动作部分常用单引号''包住

详细示例

我们以常见的网络配置文件为例,文件内容如下:

# 文件名:netconfig.conf
ctrl_interface=/var/run/wpa_supplicant
disable_scan_offload=1
update_config=1sed -i '/network/,$d' netcofig.conf

network={
	ssid="river-0101"
	psk="12345678"
	key_mgmt=WPA-PSK
}

示例1:删除第2行内容

sed -i '2d' netcofig.conf

示例2:删除第2-5行内容

sed -i '2,5d' netcofig.conf

示例3:删除 network以后的内容:

sed -i '/network/,$d' netcofig.conf
  • -i 表示直接操作文件,不输出显示(这是自动化脚本常用参数)
  • /network/是正则表达式,正则表达式都需要用/ /引用起来
  • netcofig.conf 是文件名

示例4:在文件末尾插入一个完整的network信息,需要插入的信息如下

network={
	ssid="01River-xxxx"
	psk="12345678"
	key_mgmt=WPA-PSK
}

指令如下:

sed -i '$a \
network={\
    ssid="01River-xxxx"\
    psk="12345678"\
    key_mgmt=WPA-PSK\
}\n' netcofig.conf
  • -i 表示直接操作文件,不输出显示(这是自动化脚本常用参数)
  • $ 表示最后一行,a表示行后插入内容 \ 既是换行,也是指令继续符号
  • 最后一行的\n 表示新行
    这里还有一种写法更好理解,如下:
sed -i '$ a network={\n    ssid="01River-xxxx"\n    psk="12345678"\n    key_mgmt=WPA-PSK\n}\n' netcofig.conf

·
·
·

欢迎各位老铁一键三连,本号后续会不断更新树莓派、人工智能、STM32、ROS小车相关文章和知识。

大家对感兴趣的知识点可以在文章下面留言,我可以优先帮大家讲解哦

欢迎大家光临我的淘宝小店【玩转智能机器人】,会定期推出教程中使用的物美价优的硬件,你的光临就是对我的支持

原创不易,转载请说明出处。

你可能感兴趣的:(shell,Linux,ubuntu,指令,运维)