[标签]: sed命令 字符替换 行首添加内容 行尾添加内容
问题详情的描述或方案目标的预期:
本文整理了最常见的sed使用场景的一些例子。
【解决方案】
概述
sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作;sed是按行来处理文本内容的;在shell中,使用sed来批量修改文本内容是非常方便且效率极高。
01、sed引用变量方法
方式1: 使用单引号,变量处使用单引号+双引号把变量包括起来
ARG=thnos
sed -i 's/rose/'"${ARG}"'/g' b.txt
方式2: 使用双引号,变量直接引用即可
ARG=thnos
sed -i "s/rose/${ARG}/g" name.txt
方式3: 使用单引号,变量直接引用,但是需要通过 eval 执行这个sed命令。eval会对后面Shell命令进行两遍扫描,如果第一遍扫描后,Shell命令是个普通命令,则执行此命令;如果Shell命令是含有变量的间接引用,则保证间接引用的语义
ARG=thnos
eval sed -i 's/rose/${ARG}/g' name.txt
02. 在行首出现driver的行前一行新增一行,新增内容统一为 “t.sleep(0.5)”
cat filename | sed '/^driver/i\t.sleep(0.5)'
反斜杠\:它后面的都作为内容输出,包括空格
03. 在行首出现driver的行后一行新增一行,新增内容统一为 “new_content”
cat filename | sed '/^driver/a\new_content'
04.读取content.txt文本的全部内容写入main.txt文本的以“INSERT_POINT”关键字开头那一行的下方
sed -i '/^\[INSERT_POINT\]/r content.txt' main.txt
05.删除行
删除匹配keyy关键字的行及其后3行 sed '/keyy/,+3d' a.txt
sed '1,2d' test.xx m,n 表示对m和n行之间,$表示最后一行
sed '2d' test.xx 单行 2d 只操作第二行删除
sed '/2/d' test.txt 所有包含2的行
06. 需要处理一行中前面出现的两次
运行两次即可 eg: cat filename | sed 's/ /xxx/' | sed 's/ /xxx/'
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-i :直接修改读取的文件内容,而不是输出到终端。
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
07.新增行,i前一行插入,a后一行插入
sed '1i hello world' test.txt
sed '1a hello world' test.txt
08.替换第1行 :sed '1c hello world' test.txt
替换2开头的行:sed '/^2/c hello world' test.txt
替换部分字符串而不是整行,aa替换成AA:sed 's/aa/AA/' test.txt
09.出现established关键字的行在行尾添加 ‘111’
sed '/established/s/$/111/' xx
10.出现keyy关键字的行在行首添加 ‘111’
sed '/established/s/^/111/' xx
总结:尽可能把精力花在未来的思考筹备,回望过去只在复盘成长;过去的 已经过去了。