欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用 grep 和 sed 来全局替换文件

程序员文章站 2023-12-26 14:01:57
...
今天有用户反映,199开头的手机号,不能注册,想了下,项目中的 'mobile' 正则确实限制了号段。

手机号正则,都不知道该怎么判断,新的号段不断出现,实在不行就是1\d{10}算了

正题,替换所有的手机号正则:
	我的手机号正则,也很是简单
		1[34578][0-9]{9} - 手机号
		(0[0-9]{2,3}-)?[2-9][0-9]{6,7}(-[0-9]{1,4})? - 座机号
	
	grep -l "34578]" -R * | xargs sed -i "s/34578\]/345789]/g"

	上面一条命令直接搞定。

分析:
	使用 sed 全局替换,比较危险,我们可以先使用 grep 来搜索替换的行,是否准确

		grep "34578]" -R *

	grep -l 		// 表示匹配到的文件

	sed -i			// 是直接进行文件替换,否则只是将替换后的字符串输出,并不会替换文件内容

过程中问题:
	在 mac 上进行 sed -i "s/34578\]/345789]/g" 一直报错。后搜索到答案,Mac 或 BSD 系统的 sed,强制要求 -i 选项必须加参数。

	sed -i 		// 是为了安全考虑,指定一个后缀,用于对替换文件被替换之前,进行一个备份。不同的系统,我们可以使用 man sed 来查看文档。

	// 必须指定后缀,但可以指定一个 "" 空后缀,表示不备份文件
	mac 的 -i 选项说明:
    	-i extension

         Edit files in-place, saving backups with the specified extension.  If a zero-length extension is given, no backup will be saved.  It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc.

    // 不指定后缀,就是不备份文件
    linux 的 -i 选项说明:
       	-i[SUFFIX], --in-place[=SUFFIX]

      	edit files in place (makes backup if SUFFIX supplied)


上一篇:

下一篇: