Intereting Posts
Рекурсивная функция не работает как полностью пустой видеовыход при загрузке (без регистрации ядра, вывода grub и т. д.) screen & xterm: как выбрать текст с помощью мыши в одной панели, когда окно разделено по вертикали Как узнать, какое действие или команда или сценарий назначены на аппаратную кнопку? Как использовать память (используя RAM) с помощью команды Linux? Каталоги отсутствуют в режиме восстановления Как установить драйвер WiFi в Debian 9? Извлечь дату создания и время изменения файла в Sunos Dell XPS 13 L321x не может возобновиться после приостановки Использует ли lvm-тонкое использование dm-thin под ними или они являются отдельными утилитами? Как я могу заставить chrooted программы использовать виртуальное устройство Ethernet? Ни одна из программ Linux не работает, кроме 'cd' Может ли BTRFS использовать массивы RAID RAID? Что такое бит Execute Disable? Разрешение имен не работает, но nslookup делает

sed inline editing не работает для нескольких операторов sed

Я хочу добавить #SB# в начале каждой строки, где она соответствует заданной строке

incron.sh

 sed -i -e'/test1/s/^/#SB#/g' file1 sed -i -e'/test2/s/^/#SB#/g' file1 sed -i -e'/test4/s/^/#SB#/g' file1 

file1

 /apps/pmserver $ cat file1 00 45 /ser/bat/ab.sh test1 00 45 /ser/bat/ab.sh test2 00 45 /ser/bat/ab.sh test3 00 45 /ser/bat/ab.sh test4 /apps/pmserver $ 

Я использую Korn Shell.

Я могу выполнить вывод в новый файл, но это не сработает, если в скрипте есть несколько sed как показано выше. Я получаю ошибку

 sed: Not a recognized flag: i 

То, что я пытаюсь сделать, это закомментировать несколько записей crontab принадлежащих определенной команде. test1 test2 … являются их именами файлов, и их необходимо отключить.

Аргумент -i для sed – это расширение GNU. Вероятно, вы не используете GNU sed, поэтому вы получаете сообщение об ошибке -i которая не распознана.

Ваш 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 и перенаправить без временного файла, так как ваш исходный файл будет усечен.

Вы можете использовать Vim в режиме Ex:

 ex -sc 'g/\vtest(1|2|4)/s/^/#SB#/' -cx file1 
  1. g глобальное регулярное выражение

  2. \v включить магию

  3. s заменить

  4. x сохранить и закрыть