sed -i 's#a#b#g' test.txt 将test.txt中a替换为b,s为替换,g为全局替换,不加g会只替换每行第一个
sed -i '4adddd' test.txt 在test.txt中的第四行后一行添加四个d
sed -i '4iaaaa' test.txt 在test.txt中的第四行前面一行添加四个a
sed -i '1,5addd' test.txt 在test.txt中第一到第五行后面一行添加三个d
sed -i '1,+5addd' test.txt在test.txt中的第1到第6行后面一行添加三个d
sed -i '1~2addd' test.txt在test.txt中的1、3、5、7、9后面一行添加三个d
以上也适用于删除d和修改替换c的情况
sed -i '/aaa/abbb' test.txt在有关键字aaa的行后添加一行3个d
sed -i '/cca/izzzz' test.txt 在有关键字cca的一行前添加一行4个z
sed -i '/aaa/d' test.txt 删除包含关键字aaa的行
sed -i '/^bbb/d' test.txt 删除以bbb开头的行
sed -i '2cddd' test.txt将第二行替换为三个d
修改替换关键字可以用sg来实现
sed -i 's#aaa#bbb#g' test.txt 将test.txt中的aaa全局替换为bbb #为定界符,定界符可以用/ : |来代替,aaa可以用#来代替。
sed里面单引号和双引号 双引号里面可以用变量,单引号不能用变量,如果单引号里面用到变量,需要把变量再用单引号比如 sed 's#'$a'#'$b'#g' test.txt
利用sed批量改文件名
将上图中文件名中的sed批量去掉
ls *.sh|sed -r 's#(^.*)sed.sh#mv & \1.sh#g'|bash
思路为单独列出文件名中的‘sed’,后面去掉。&代表前面分隔符(#)之间的内容,\1是后向引用,代表前面小括号的内容,&存放原文件名,\1.sh存放修改后的文件名。后面传递给bash命令才能执行
批量重命名也可以用命令rename来执行
rename 原字符串 目标字符串 文件
参数
原字符串:将文件名需要替换的字符串;
目标字符串:将文件名中含有的原字符替换成目标字符串;
文件:指定要改变文件名的文件列表
比如以上批量重命名文件可以写作
rename "sed" " " *注意引号之间的空格