Сбросьте шаблон слова в конце строки, используя 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=\$\!\).*$//' 

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

  • Преобразование простых данных в json-файл
  • оценивать несколько шаблонов из вывода программы и записывать в определенные шаблоны файлы
  • Как удалить первую точку перед первым номером?
  • Извлечение нескольких экземпляров текста между двумя словами, включая стартовое слово, но исключающее слово
  • условная окраска в grep
  • соответствие строки awk из 2 столбцов
  • bash - извлекает имена файлов из html-файла, содержащего несколько ссылок
  • Текст обтекания и отступов с использованием coreutils
  • 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 необходима для использования расширенных регулярных выражений.

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