Как сделать так, чтобы команда sed вносила постоянные изменения в файл?

Как сделать так, чтобы команда sed вносила постоянные изменения в файл?

Возможно ли это? Я где-то читал, что следующая команда это сделает:

sed -e [команда] [файл]

но, похоже, он сделал то же самое, что и просто

sed [команда] [файл]

(изменения не сохранились). Есть ли способ сделать это с помощью sed?

решение1

Я думаю, вы ищете -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реализациями.

решение2

Эти решения работают для 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

решение3

-eопция предназначена для выполнения нескольких sedкоманд

sed -e 's/linux/unix/' -e 's/os/OS/' file.txt

рассматривать file.txtкак

linux os

тогда О/П есть

unix os

-iопция сохраняет изменения навсегда...

Связанный контент