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

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

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

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

  • Команда раскраски оболочки и выход различаются
  • Автозаполнение баста для псевдонима
  • В сценариях Bash, что значит «$! «?
  • Невозможно применить яркость к цвету фона терминала
  • Как я могу предотвратить меньше освобождения экрана при выходе?
  • Как добавить новую текстовую строку в первую строку файла?
  •  ksh -x SCRIPT2.ksh $BUSSINESSDATE & PID=$!; ksh -x SCRIPT1.ksh $BUSSINESSDATE 

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

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

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

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

  • Diff, показать измененную строку только из правого файла
  • Сценарий для выбора редактора для открытия файла на основе аргумента
  • Почему bash появляется быстрее в VM Ubuntu, чем на главном MacOS?
  • обмен двумя словами с помощью sed
  • Удалите большие куски из json, используя vim
  • Редактирование файла свойств Java с помощью Bash
  • 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 - лучшая ОС в мире.