Сбросьте шаблон слова в конце строки, используя sed

У меня есть строка:

ksh -x SCRIPT2.ksh $BUSSINESSDATE & PID=$!; ksh -x SCRIPT1.ksh $BUSSINESSDATE & PID=$!; 

Я хочу удалить последнее слово & PID=$!; , Желаемый результат:

 ksh -x SCRIPT2.ksh $BUSSINESSDATE & PID=$!; ksh -x SCRIPT1.ksh $BUSSINESSDATE 

Примечание : у меня есть & PID=$!; в середине строки мне нужно только избавиться от последнего слова, которое содержит & PID=$!;

Я использую sed достижения этого. Но, похоже, он не дает ожидаемого результата.

 sed 's/\(\& PID=\$\!\).*$//' 

любая помощь будет оценена по достоинству.

3 Solutions collect form web for “Сбросьте шаблон слова в конце строки, используя sed”

 sed -e 's/& PID=\$\!;$//' 

$ To end привязывает его к концу строки.

Все ответы до сих пор хороши, но для этого конкретного примера вы можете сэкономить свое время и написать несколько символов меньше:

 sed 's/ & [^ ]*$//' 

или даже лучше

 sed 's/ & \S*$//' 

Чтобы удалить последнее вхождение шаблона в строке, вы можете просто сжать его.

 sed 's/\(.*\)& PID=$!;/\1/' 

Это будет соответствовать максимально возможному значению в \1 перед сопоставлением строки, поэтому оно всегда будет разделять только последнее вхождение – независимо от того, действительно ли строка, которую вы разделяете, находится в конце строки.

Ваша попытка:

  sed 's/\(\& PID=\$\!\).*$//' 

… делает что-то вроде противоположного. Он разбивает все символы в строке, начинающейся с первого вхождения вашей строки и следуя за ней до конца строки.

Помните правило самого левого самого длинного – регулярное выражение всегда будет начинать свое совпадение как можно дальше слева в строке, и оно может продолжаться до тех пор, пока это возможно.


Обратите внимание: если вы хотите удалить только n последних символов, то с помощью gnu sed

 sed -E 's/.{9}$//' 

Здесь опция -E необходима для использования расширенных регулярных выражений.

  • Извлечение нескольких экземпляров текста между двумя словами, включая стартовое слово, но исключающее слово
  • Поиск файла для строки, окруженной двумя другими известными строками?
  • Как сопоставить 2 больших файла и распечатать разницу в сценарии оболочки
  • оптимизировать команду с помощью or или pipe для анализа вывода ifconfig
  • Полосы пробелов после одиночных заглавных букв с sed
  • создайте новый столбец на основе существующих столбцов, используя оператор else в awk
  • Как удалить строку из тега в сценарии оболочки?
  • Как заполнить конечные теги с помощью sed, awk или любой другой команды?
  • Команда, чтобы увидеть, находится ли слово в списке файлов и выводит, сколько файлов оно находится в
  • Создать в HTML из вывода скрипта bash
  • Как печатать текст между первым вступлением пары строк?
  • Как удалить несколько строк в каждом вхождении в файл?
  • Interesting Posts

    Каковы плюсы и минусы dselect и apt-get?

    Как создать пакет RPM, который не сможет выполнить транзакцию YUM, если будут выполнены определенные кретеры

    Работает ли sysrq при панике ядра?

    Мышь VMware иногда удерживается (не может «unclick», левая кнопка мыши перестает работать, хватайте ungrab)

    Почему у ролика есть более низкие привилегии, чем у пользователя?

    Неизвестный параметр Флаг при работе с sudo

    Должен ли я установить пользовательский webapp в / opt или / srv?

    Launcher поверх X11 в качестве оконного менеджера

    Не удается удалить файлы даже с помощью root, lsattr также не отвечает

    SELinux: Как создать пользовательский ярлык для файлов?

    Как получить список кодов выхода (и / или коды возврата) и значение для команды / утилиты?

    Мостовая сеть с разными подсетями

    Когда использовать стандартный поток ошибок в приложении командной строки?

    запуск сценария в определенное время без использования cron

    Как показать длинные строки консоли в виде постраничного просмотра?

    Linux и Unix - лучшая ОС в мире.