2. 命令
参数说明:
-e<script>或—expression=<script> 以选项中指定的script来处理输入的文本文件。 -f<script文件>或—file=<script文件> 以选项中指定的script文件来处理输入的文本文件。 -h或—help 显示帮助。 -n或—quiet或—silent 仅显示script处理后的结果。 -V或—version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行); c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行; d :删除 i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); p :打印,通常 p 会与参数 sed -n 一起运行 s :取代,这个 s 的动作可以搭配正则表达式
3. 示例
3.1. 追加删除
# sample.txt文件第4行后面追加一行 sed -e '4a hello' sample.txt # sample.txt文件第1行前面添加“hello”;实质就是插入内容到文件第1行 sed -i '1 i hello' sample.txt # sample.txt文件第1行后面添加“hello”;实质就是插入内容到文件第2行 sed -i '1 a hello' sample.txt # 把"hello"插入到最后一行 sed -i '$a hello' sample.txt # 在1-2行行首添加bb sed -i '1,2{s/^/bb/}' sample.txt # 在1-2行行尾添加bb sed -i '1,2{s/$/bb/}' sample.txt
将第 2~5 行删除
nl aaa.txt | sed '2,5d'
将文件中包含 字符串1 的行删除
sed -i "/字符串1/d" 文件名.txt #包含 字符串1 或 字符串2的行删除 sed -i "/字符串1\|字符串2/d" 文件名.txt #删除以R或F开头的行 sed '/^[RF]/d' 文件名.txt #删除以 x 或 m 结尾的行 sed '/[xm]$/d' 文件名.txt
删除空白行
sed '/^$/d' 文件名.txt
3.2. 查找替换
# 加 g 为全局查找替换 sed 's/要被取代的字串/新的字串/g' # 不加则为每行第一次出现的替换 sed 's/要被取代的字串/新的字串/' # 参数 e 则输出修改后内容,不修改原文件 sed -e 's/要被取代的字串/新的字串/g' aaa.txt # 参数 i 直接修改原文件,不输出结果 sed -i 's/要被取代的字串/新的字串/g' aaa.txt # 多个文件批量修改 sed -i 's/要被取代的字串/新的字串/g' *.txt # 如果替换的内容有/,可以将分隔符改为其他的字符,比如# sed -i 's#要被取代的字串#新的字串#g' *.txt # 使用变量 #方式1: 使用单引号,变量处使用单引号+双引号把变量包括起来 sed -i 's#要被取代的字串#新的字串'"${a}"'#g' *.txt #方式2: 使用双引号 sed -i "s#要被取代的字串#新的字串${a}#g" *.txt #方式3: 使用单引号,变量直接引用,但是需要通过 eval 执行这个sed命令。eval会对后面Shell命令进行两遍扫描,如果第一遍扫描后,Shell命令是个普通命令,则执行此命令;如果Shell命令是含有变量的间接引用,则保证间接引用的语义 eval sed -i 's#要被取代的字串#新的字串${a}#g' *.txt