Ответы:
Я думаю, что вы ищете -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Например:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
Если вы предоставите суффикс, он создаст файл резервной копии:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
Входной файл изменяется, и создается резервная копия, содержащая данные исходного файла.
Также обратите внимание, что это для GNU sed
, есть небольшие различия в формате между различными sed
реализациями.
sed
не выполняет редактирование на месте. Создает новый файл и перезаписывает старый, изменяется индекс.
{ rm file; cmd > file; } < file
можно сделать вывод, что cmd читает и пишет в один и тот же файл, чего не происходит. Это два разных файла, которые просто имеют одно и то же имя. Но я не хочу начинать обсуждение здесь.
sed: 1: "foo.txt": invalid command code f
при запуске sed -i 's/o/X/g' foo.txt
. Однако, предоставляя расширение, вроде sed -i .bak 's/o/X/g' foo.txt
работает нормально. Любые идеи, как заставить это работать без создания файлов резервной копии?
sed -i '' 's/o/X/g' foo.txt
Это решение работает для HPUX (UNIX):
1
{ rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh
.:
2.
perl -pi -e 's/Error/NO_Error/g' test1.sh
3.
sed 's/Error/NO_Error/g' test1.sh | tee test1.sh
-e
опция для выполнения нескольких sed
команд
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
считать file.txt
как
linux os
тогда O / P
unix os
-i
опция сохраняет изменения навсегда ...
-e
Флаг означает выражение. Вы, вероятно, хотите-i
флаг, который означает,in-place
и я настоятельно рекомендую вам использоватьsed -i.bak 's/../' filename