Mac终端批量替换2000+TXT文件首行内容的方法问询
解决Mac终端批量替换.txt文件首行的问题
方法一:针对当前目录下的.txt文件
你之前的for循环命令把替换的新旧内容写反了,且Mac版sed的-i参数需要特殊处理,正确命令如下:
for file in *.txt; do sed -i '' '1s/^PUT KEYWORDS HERE$/my files 1000X with XYT of 20gt/' "$file" done
-i '':Mac系统的sed要求指定备份后缀,空字符串表示不生成备份文件;如果需要保留原文件备份,可改为-i.bak,会生成带.bak后缀的备份文件1s/^PUT KEYWORDS HERE$/.../:仅对第1行执行替换,^和$用于精确匹配整行内容,避免误替换其他行中包含该字符串的情况"$file":正确引用文件名,兼容文件名含空格的场景
方法二:处理当前目录及子目录下的.txt文件
如果需要递归处理子目录中的文件,使用find命令更合适:
find . -type f -name "*.txt" -exec sed -i '' '1s/^PUT KEYWORDS HERE$/my files 1000X with XYT of 20gt/' {} \;
-type f:仅匹配文件,排除目录-name "*.txt":筛选出所有.txt后缀的文件-exec ... {} \;:对每个找到的文件执行后续的sed命令,{}代指当前匹配到的文件名
注意事项
- 建议先找单个测试文件执行命令,确认替换效果后再批量操作
- 若原首行内容存在大小写差异,可在
sed命令中添加I修饰符(即1s/^PUT KEYWORDS HERE$/.../I)实现忽略大小写匹配
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

