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

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

  • Как использовать команду sed для изменения записи файла в строке в сценарии оболочки?
  • Как извлечь строку между двумя шаблонами с помощью sed в Linux, а второй шаблон повторяет больше строк в файле
  • Как я могу отображать 3 строки текста за один раз на 1 строку?
  • замените '_' на ',' в файле, который содержит список имен файлов
  • Самый простой способ найти / заменить в файле с помощью списка?
  • Как удалить все вхождения списка слов из текстового файла?
  • Печатать начало и конец между двумя шаблонами, исключая конец диапазона
  • Curl url txt file, но grep каждый URL отдельно от одного файла
  • 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 - лучшая ОС в мире.