sed -e 's/& PID=\$\!;$//'
O $
no final ancora no final da string.
Eu tenho a seguinte string:
ksh -x SCRIPT2.ksh $BUSSINESSDATE & PID=$!; ksh -x SCRIPT1.ksh $BUSSINESSDATE & PID=$!;
Eu quero remover a última palavra & PID=$!;
. O resultado desejado é:
ksh -x SCRIPT2.ksh $BUSSINESSDATE & PID=$!; ksh -x SCRIPT1.ksh $BUSSINESSDATE
Nota : que eu tenho & PID=$!;
no meio da string, eu só preciso me livrar da última palavra que contém & PID=$!;
Estou usando sed
para alcançar isso. Mas isso não parece produzir o resultado esperado.
sed 's/\(\& PID=\$\!\).*$//'
Todas as respostas são boas até agora, mas para este exemplo concreto você pode economizar seu tempo e escrever alguns caracteres a menos:
sed 's/ & [^ ]*$//'
ou melhor ainda
sed 's/ & \S*$//'
Para remover a última ocorrência de um padrão em uma linha, basta apertá-lo.
sed 's/\(.*\)& PID=$!;//'
Isso corresponderá o máximo possível em antes de corresponder à string, de modo que sempre removerá apenas a última ocorrência, independentemente de a string ser ou não removida, na verdade, no final da linha.
Sua tentativa:
sed 's/\(\& PID=\$\!\).*$//'
... faz algo parecido com o oposto. Ele retira todos os caracteres em uma linha que começa com a primeira ocorrência da string e segue até o final da linha.
Lembre-se da regra leftmost-longest - um regexp sempre começará sua correspondência o mais à esquerda na string como deveria e continuará correspondendo pelo maior tempo possível.
Observe que, se você quiser remover apenas n
últimos caracteres, em seguida, com gnu sed
sed -E 's/.{9}$//'
Aqui, a opção -E
é necessária para usar expressões regulares estendidas.