从网上 down 了一个压缩包,需要把里面多个文件在开头加上一句代码。于是就在 mac 上写了个脚本,但是运行结果很诡异。脚本其实非常简单:
1
2
3
4
5
#!/bin/bash
for file in `ls`
do
sed -i '1s/^.*$/package nio;/' file
done
运行的时候,老是报错。说文件名的一个字母是无效的云云。我在 centos 上试了一下,完全没问题。估计就是 Mac 环境的因素,google 之后解决:
####sed 用法
sed -i ‘s/[匹配字符串]/[替换字符串]/g’ [文件名]
例如:将文件夹内的所有txt文件里的所有 “Test String”替换成“New Test String”
sed -i ‘s/Test String/New Test String/g’ *.txt
注意:
- 空格不需要转义
- 点符号需要转义:
\.
- 在Mac系统的命令行下使用时,需要为原文件设定一个备份文件
其中第三条就是我遇到的坑,Mac 下必须指定个备份文件:
sed -i ‘.bak’ ‘s/Test String/New Test String/g’ *.txt
如果不想设置备份文件时,在第一个单引号里什么都不输入:
sed -i ” ‘s/Test String/New Test String/g’ *.txt
所以我把脚本改了一下就 ok 了:
1
2
3
4
5
#!/bin/bash
for file in `ls`
do
sed -i '' '1s/^.*$/package nio;/' file
done