用 brew 安装 gnu-sed:
brew install gnu-sed
安装好的命令是 gsed 。
匹配```和```之间的多行内容,并在它们的行首添加 4 个空格:
gsed -i '/```/{:ans/^/ /g/```/!ba}' filename
配合 find 命令,批量处理所有文件:
find . -name "*.md" -exec gsed -i '/```/{:ans/^/ /g/```/!ba}' {} \
“多行处理”参考自 https://www.cnblogs.com/yangxiaochu/p/7602884.html
sed匹配全行,行首,行尾后替换或添加字符
sed 替换匹配开头字符的行
配置文件/etc/config.txt中有一行是
version=xx.xx.xx
每次进行版本发布,需要重新填写这个值,
可以用shell脚本中,加入sed命令来完成新版本号的替换
#首先定义一个新版本号的变量
var="version=6.1.1"
sed -i '/^version=/c'$var'' /etc/config.txt
i :直接修改读取的文件内容,而不是输出到终端。
^表示一行的开头
sed匹配某一行开头,替换整行内容
sed -i '/^cloud_server/ccloud_server_ip = update' name.txt
[root@centos8-38 opt]# cat sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
coud_server dddd 3333
[root@centos8-38 opt]# coud="cloud_server=1111"
[root@centos8-38 opt]#
[root@centos8-38 opt]# sed '/^coud/c'$coud'' sed.txt
cloud_server=1111
cloud_server=1111
cloud_server=1111
sed 匹配部分替换
[root@centos8-38 opt]# sed 's/dddd/gggg/g' sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
coud_server gggg 3333
sed 匹配行中部分内容,替换整行
[root@centos8-38 opt]# sed '/.*dddd.*/c'$coud'' sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
cloud_server=1111
sed 也可以匹配行首或是行尾,中间部分内容后,
再行首或是行尾添加内容。
如下面:
666& 表示添加到行首,&666 表示添加到行尾。
[root@centos8-38 opt]# sed 's/^ccc/666&/g' sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
coud_server dddd 3333
666cccc 2222
666cccc 111
[root@centos8-38 opt]# sed 's/^.*ddd.*/666&/g' sed.txt
coud_server xxdfdkjjjj1111 3333
coud_server 3333
666coud_server dddd 3333
cccc 2222
cccc 111
sed编辑器是一行一行的处理文件,正在处理的内容存放在模式空间(缓冲区)中,处理完毕后按照选项的规定进行输出或文件的修改。
sed主要用来自动编辑一个或多个文件;简化文件的反复 *** 作,用于非交互编译文件。
可以使用一个简单的数字,或是一个行号范围
注意:p的动作是:打印匹配行。
1. 原始文件:
2. sed的默认动作
(1)sed的默认动作是打印文件中的所有行。
3. 打印特定行
(1)因为sed命令默认打印文件中所有行。所以第三行会被打印两遍。那如何只打印第三行呢?使用【-n】命令,只打印匹配的行。
(2)使用【-n】命令,只打印匹配到的行
(3)打印[n,m]行
(4)打印包含模式的行
(5)打印包含模式和指定行号之间的行
(6)包含模式和包含模式之间的行
(7) {}执行多个命令(command),使用;隔开。=是显示文件行的行号。p是打印匹配行
(8)!取反 *** 作
(9)q命令:第一个模式匹配完成后退出或立即退出,使用该命令打印前5行
(1)使用[]进行正则匹配
(2)其他的正则表达式
(1)打印出以#开头的行,然后用!进行反选,则表示过滤掉以#开头的行,不会过滤掉空格。
(2)匹配以#开头的行,进行取反,则打印出非#开头的行,然后其结果在对空格开头的行进行取反。即 过滤掉以#开头的行和以空格开头的行。 {}表示在定位行执行的命令组。
(3)sed支持对单个文件实现不同的 *** 作,每个 *** 作用-e参数。定位到执行的行后,使用d命令,直接删除匹配到的行。
需要注意的是,对源文件的添加要使用【-i】参数。
s:使用替换模式替换相应模式
(1)在匹配行前面替换字符,使用【s】命令。
(2)在所有行开头替换元素【s】
(3)在所有行的末尾替换元素
(4)指定行,进行替换 *** 作
(5)【&】符号代表的是匹配到的字符。在匹配到字符后,可以使用&代替。
(6)在匹配到行前面添加一行,使用【i】的命令
(7)在匹配行的后面添加一行,使用【a】命令
(8)当添加多行时,使用\n来转义
(9)@代表的是【地址定界符】,一般由三个组成,定界符可以是/,$,#等特殊字符,此命令表示,匹配特定字符的行进行替换。
(10)使用命令【g】修改全文中出现的匹配字符。
(11)若后面接数字之后在接g,表示匹配的行中,第几次出现。就替换,2g表示替换行中第二次出现。
(1)删除以非#号开头的行,即显示以#号开头的行。
(2)删除第一行
(3)删除最后一行
(4)删除指定的行区间
(5)删除包含特定单词的行
本文参考:
sed命令详解
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)