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

实现效果:

img

2、替换每行所有的 xiaomi 为 iphone,第三个 “/” 后,加参数 g 就是替换所有
1
sed -i "s/xiaomi/iphone/g" huawei.txt

img

实现效果:

img

3、替换每行第二个 redmi 为 potato,第三个 “/” 后,加参数 2 就是替换第 2 个
1
sed -i "s/redmi/potato/2"

img

4、替换每行第二个 mate 到最后一个 mate,为 pico,第三个 “/” 后,加参数 2g 就是替换第 2 至最后
1
sed -i "s/mate/pico/2g" 

img

替换每行前两个 KFC 为 CPU
1
2
3
sed -i "s/KFC/CPU/"

sed -i "s/KFC/CPU/"
5、先替换第一个,此时原本的第二个字符串从顺序上来说变成了第一个,就再替换一次

img

(以上的操作范围为每一行,接下来我们精确筛选需要修改的特定行 or 第几行,方便演示我们就只改变特定行的第一个字符串。也就是不加 “g”)

6、替换第二行的第一个 HBW 为 MDL

sed -i “2s/HBW/MDL/“ HBW.txt

img

7、替换第二行到最后一行的 HBW 为 MDL(符号 $ 表示最后一行,如果写数字就代表到第几行)

sed -i ‘2,$s/HBW/MDL/‘ HBW.txt

注意当语句中使用逗号”,” 时,语句外就必须使用单引号

img

(以上都是针对特定字符串本身的替换,接下来我们修改行首或行尾).

8、给第一行行首加上 chicken(符号 ^ 代表行首)

sed -i ‘1s/^/chicken/‘ ktv.txt

img

9、给第一行行尾加上 beautiful(符号 $ 代表行尾)

sed -i ‘1s/$/beautiful/‘ ktv.txt

img

(使用 sed -i 命令直接修改文件后,后悔了怎么办?可以加上参数 - i.bak,就会修改的同时创建备份)

10、给每行行首加上 chicken,同时创建备份文件(备份还没有写入 chicken 的文件)

sed -i.bak ‘s/^/chicken/‘ aaa.txt

img

11、多个替换动作,用分号;隔开可以一起执行

同时给所有行首加上 top,给所有行尾加上 bottom(注意没有调用 - i 参数,修改结果不会写入文件

sed ‘s/^/top/;s/$/bottom/‘ aaa.txt

img

12、如果需要替换的字符串包含单引号‘,那么就使用双引号来包围参数

替换每行的 n’a 为 na,(注意为了方便没有使用 - i 参数,修改结果不会写入文件)

sed “s/n’a/na/“ aaa.txt

img

13、斜杠 / 本身是作为 sed 语句中的分隔符,但如果需要替换的字符串里也包含斜杠 /,那么可以用井号 #来做分隔符(还可以用问号?)

替换 n/a 为 na,(没有调用参数 - i,修改结果不会写入文件)

1
sed "s#n/a#na#" aaa.txt

img

1
sed "s?n/a?na?" aaa.txt

img

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" ./`
  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值