sed没有读取可执行文件的原因是我的
在一个终端shell中,我试图在一组Python文件上循环,并用sed执行查找和替换,例如:
$ for f in `ls *.py`; do sed -i 's|foo|bar|g' $f; done;
然而,对于一些文件(尤其是那些我更改为可执行的Python脚本(,它给出了错误:
sed: can't read example_script.py: No such file or directory
为什么它可能不适用于可执行文件,而适用于其他文件?
ls
别名为ls --color=auto
。因此,ls
在for循环中返回的文件名不仅仅是带有文件名的ascii字符串,它们还包含颜色信息,例如:
''$' 33''[01;32mexample_script.py'$' 33''[0m'
所以sed找不到这个奇怪的文件!
正如评论中所指出的,在这种情况下,实际上不需要使用ls
来创建我的可迭代列表,我可以改为:
$ for f in *.py; do sed -i 's|foo|bar|g' "$f"; done;
甚至没有for循环:
$ sed -i 's|foo|bar|g' *.py
原始答案:这是我留给子孙后代的原始答案,之所以保留在这里,是因为这是我自己在评论帮助之前所做的。
对我来说(假设设置了这个别名(的解决方案是运行我的for循环,确保指定ls --color=none
,即:
$ for f in `ls --color=none *.py`; do sed -i 's|foo|bar|g' $f; done;