替换文件中的字符串时,xargs和sed会创建不需要的文件

时间:2014-01-17 16:32:35

标签: bash unix sed xargs

我有一个名为test的文件夹,其中有两个文件style.css和一个名为.DS_Store的隐藏文件。我的目的是递归地将test下的所有文件中的所有“changefrom.this”字符串替换为“to.this”。所以我想出了:

folder_root="test"

# change text in files
find $folder_root/ -type f -print0 | xargs -0 -n 1 sed -i -e 's/changefrom.this/to.this/g'

虽然例如在style.css文件中替换了字符串,但执行会输出错误:

sed: RE error: illegal byte sequence  

我在test文件夹中收到了一些新文件:style.css-e!2766!.DS_Store。没想到。这是怎么回事?

2 个答案:

答案 0 :(得分:0)

您可以使用find -exec sed尝试此简化命令:

find "$folder_root/" -type f -exec sed -i 's/changefrom\.this/to.this/g' '{}' +

如果changefrom.this不是您正在使用的实际模式,请告诉我们该模式可能导致问题的原因。

答案 1 :(得分:0)

试试这个:

find $folder_root/ -type f -print0 | LC_ALL=en_US.CP437 xargs -0 -n 1 sed -i -e 's/changefrom.this/to.this/g'

如果可行,问题是您的终端编码与文件的编码不匹配。 CP437没有坏字节,所以这修复了7位ascii中的正则表达式。