다음 문자열이 있습니다.
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=\$\!\).*$//'
답변1
sed -e 's/& PID=\$\!;$//'
끝 쪽으로 $
로프의 끝 부분에 고정하십시오 .
답변2
지금까지의 답변은 모두 훌륭하지만 이 특정 예에서는 시간을 절약하고 문자를 몇 개 더 적게 작성할 수 있습니다.
sed 's/ & [^ ]*$//'
아니면 더 나은
sed 's/ & \S*$//'
답변3
라인에서 마지막으로 나타나는 패턴을 삭제하려면 해당 패턴을 쥐기만 하면 됩니다.
sed 's/\(.*\)& PID=$!;/\1/'
이는 일치하기 전에 가능한 많은 문자열과 일치하므로 \1
제거하는 문자열이 실제로 줄 끝에 있는지 여부에 관계없이 항상 마지막 일치 항목만 제거합니다.
귀하의 시도:
sed 's/\(\& PID=\$\!\).*$//'
...반대로 하세요. 문자열이 처음 나타나는 부분부터 줄 끝까지 줄의 모든 문자를 제거합니다.
기억하다왼쪽이 제일 길어요규칙 - 정규식은 가능할 때마다 항상 문자열의 왼쪽부터 일치를 시작하고 가능한 한 계속 일치합니다.
n
마지막 문자 만 제거하려면 gnu를 사용하십시오.sed
sed -E 's/.{9}$//'
-E
이 옵션은 확장 정규식을 사용하는 데 필요합니다.