我有一个名为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
。没想到。这是怎么回事?
答案 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中的正则表达式。