Для раскрытия этой тайны просто вводят apt-cache show gnome
и созерцайте:
Описание: Рабочая среда GNOME, с дополнительными компонентами Это - Рабочая среда GNOME, интуитивный и привлекательный рабочий стол, с дополнительными компонентами.
Этот пакет зависит от стандартного распределения Рабочей среды GNOME, плюс полный спектр плагинов и других приложений, интегрирующихся с GNOME и Debian, обеспечивая самую лучшую среду до настоящего времени.
Вашим sed является не-GNU (вероятно), таким образом-i для того, чтобы на месте отредактировать не поддерживается. Можно избежать его при помощи временного файла:
sed -i -e'/test1/s/^/#SB#/g' file1
становится
sed -e'/test1/s/^/#SB#/g' file1 > temp_file
mv temp_file file1
Конечно, можно сделать это лучше при помощи mktemp как это
tmpfile=`mktemp`; sed -e '/test1/s/^/#SB#/g' file1 > $tmpfile; mv $tmpfile file1
Абсолютно для предотвращения sed и перенаправления без временного файла, поскольку исходный файл станет усеченным.
-i
аргументом sed является расширение GNU. Вы, вероятно, не выполняете GNU sed, который является, почему Вы получаете ошибку о -i
быть нераспознанным.
Вы можете использовать Vim в режиме Ex:
ex -sc 'g/\vtest(1|2|4)/s/^/#SB#/' -cx file1
g
global regex
\v
включить магию
s
заменить
x
сохранить и закрыть
В ответах поясняется, что -i
не является стандартным, в одном из них даже поясняется использование вместо него временного файла, но игнорируется главный вопрос, как это сделать для нескольких операторов.
Конечно, вы можете перенаправить каждое выражение и скопировать обратно после каждого выражения. Но вам все равно не нужны отдельные вызовы sed
для каждого оператора, вы можете указать несколько скриптов с несколькими-e
:
sed -e '/test1/s/^/#SB#/g' -e '/test2/s/^/#SB#/g' -e' /test4/s/^/#SB#/g' file1
Или вы можете объединить sed
команды с;
:
sed '/test1/s/^/#SB#/g;/test2/s/^/#SB#/g;/test4/s/^/#SB#/g' file1
В вашем примере вы даже можете найти регулярное выражение для объединения замен:
sed '/test[124]/s/^/#SB#/g' file1
Ответ после того, как мы улучшим скрипт :Флаг g
для команд s
означает «заменить все вхождения в строке», но поскольку каждая строка имеет только одно начало (^
), вы можете опустить это, так что ваша последняя работа
sed '/test[124]/s/^/#SB#/' file1 > /tmp/file1 && mv /tmp/file1 file1
(&&
используется, чтобы избежать уничтожения файла в случае сбоя sed
)
sed -i -e'/test1/s/^/#SB#/g' file1
sed -i -e'/test2/s/^/#SB#/g' file1
sed -i -e'/test4/s/^/#SB#/g' file1
– stasunny 12.01.2012, 15:17sed -e'/test1/s/^/#SB#/g' -e'/test2/s/^/#SB#/g' -e'/test4/s/^/#SB#/g' file1
или даже просто запишите им всемsed -e'/test[124]/s/^/#SB#/g' file1
. Но используйте тщательно эту конструкцию. Ошибка в sed операторе испортит Ваш файл. $path CD "хоста – rush 12.01.2012, 16:25