Mac 上 sed 的一个坑

| 分类 Linux  | 标签 Linux 

从网上 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

注意:

  1. 空格不需要转义
  2. 点符号需要转义:\.
  3. 在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

上一篇     下一篇