Відповіді:
Я думаю, ти шукаєш -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
не робить на місці редагування. Створюється новий файл і перезаписується старий, змінюється inode.
{ rm file; cmd > file; } < file
би приводить до висновку, що cmd читає і записує в той самий файл, що і ні. Це два файли distince, які просто мають однакове ім'я. Але я не хочу тут починати дискусію.
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