Причина, по которой исполняемые файлы не читаются с помощью sed, заключается в том, что у меня ls
есть псевдоним ls --color=auto
. Следовательно, имена файлов, возвращаемые ls
в for для l oop, не просто строки ascii с именем файла, они также содержат информацию о цвете, например:
''$'\033''[01;32mexample_script.py'$'\033''[0m'
, поэтому sed не может найти этот странный файл!
Как указано в комментариях, в этом случае на самом деле нет необходимости использовать ls
для создания моего итерируемого списка, и я мог бы вместо этого сделать:
$ for f in *.py; do sed -i 's|foo|bar|g' "$f"; done;
или даже без for l oop:
$ sed -i 's|foo|bar|g' *.py
Оригинальный ответ : вот мой оригинальный ответ для потомков, сохраненный здесь, потому что это то, что я сделал сам, до помощи комментаторов.
Решение для меня (учитывая, что этот псевдоним установлен) состоит в том, чтобы вместо этого запустить my для l oop, указав ls --color=none
, то есть:
$ for f in `ls --color=none *.py`; do sed -i 's|foo|bar|g' $f; done;