Linux文件+内容查找与替换
批量重命令
要求:查找文件名,替换文件名指定内容
1 | find . -name "*abc*" | while read name;do rename "s/abc/xxx/" ; done |
需求:下载的文件(夹)有wagnpan.com前缀,手动改太费劲,想要批量去掉:
1 | find . -type d -name "wangpan.com-*" -exec rename "wangpan.com-" "" {} \; |
要求:批量改扩展名:
1 | for f in $(find -type f -name '*.md' ); do mv -i $f ${f%.md}.txt ; done |
查找文件并替换内容
1 | find ./ -type f | xargs grep "kodcloud" -l | xargs sed -i 's/kodcloud/aisyun/g' |
Sed命令
1、替换每行第一个huawei为apple,第三个“/”后,不加参数就是只替换第一个
1 | sed -i "s/huawei/apple/" huawei.txt |
实现效果:
2、替换每行所有的xiaomi为iphone,第三个“/”后,加参数g就是替换所有
1 | sed -i "s/xiaomi/iphone/g" huawei.txt |
实现效果:
3、替换每行第二个redmi为potato,第三个“/”后,加参数2就是替换第2个
1 | sed -i "s/redmi/potato/2" |
4、替换每行第二个mate到最后一个mate,为pico,第三个“/”后,加参数2g就是替换第2至最后
1 | sed -i "s/mate/pico/2g" |
替换每行前两个KFC为CPU
1 | sed -i "s/KFC/CPU/" |
5、先替换第一个,此时原本的第二个字符串从顺序上来说变成了第一个,就再替换一次
(以上的操作范围为每一行,接下来我们精确筛选需要修改的特定行or第几行,方便演示我们就只改变特定行的第一个字符串。也就是不加“g”)
6、替换第二行的第一个HBW为MDL
sed -i “2s/HBW/MDL/“ HBW.txt
7、替换第二行到最后一行的HBW为MDL(符号$表示最后一行,如果写数字就代表到第几行)
sed -i ‘2,$s/HBW/MDL/‘ HBW.txt
注意当语句中使用逗号”,”时,语句外就必须使用单引号
(以上都是针对特定字符串本身的替换,接下来我们修改行首或行尾).
8、给第一行行首加上chicken(符号^代表行首)
sed -i ‘1s/^/chicken/‘ ktv.txt
9、给第一行行尾加上beautiful(符号$代表行尾)
sed -i ‘1s/$/beautiful/‘ ktv.txt
(使用sed -i命令直接修改文件后,后悔了怎么办?可以加上参数-i.bak,就会修改的同时创建备份)
10、给每行行首加上chicken,同时创建备份文件(备份还没有写入chicken的文件)
sed -i.bak ‘s/^/chicken/‘ aaa.txt
11、多个替换动作,用分号;隔开可以一起执行
同时给所有行首加上top,给所有行尾加上bottom(注意没有调用-i参数,修改结果不会写入文件
sed ‘s/^/top/;s/$/bottom/‘ aaa.txt
12、如果需要替换的字符串包含单引号‘,那么就使用双引号来包围参数
替换每行的n’a为na,(注意为了方便没有使用-i参数,修改结果不会写入文件)
sed “s/n’a/na/“ aaa.txt
13、斜杠/本身是作为sed语句中的分隔符,但如果需要替换的字符串里也包含斜杠/,那么可以用井号#来做分隔符(还可以用问号?)
替换n/a为na,(没有调用参数-i,修改结果不会写入文件)
1 | sed "s#n/a#na#" aaa.txt |
1 | sed "s?n/a?na?" aaa.txt |
sed与grep结合
语法格式
1 | sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录` |
以下我们实现在当前目录下查找包含 baidu 的字符串,并将字符串 baidu 替换为 runoob,执行命令:
1 | sed -i "s/baidu/runoob/g" `grep "baidu" -rl ./` |
接下来使用一个更复杂实例,批量替换网址 libs.baidu.com 为 cdn.static.runoob.com:
1 | sed -i "s/https:\/\/libs.baidu.com/https:\/\/cdn.static.runoob.com\/libs/g" `grep -rl "libs.baidu.com" ./` |