sed를 사용하여 문자열 끝에서 단어 패턴 제거

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=\$\!\).*$//'

답변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이 옵션은 확장 정규식을 사용하는 데 필요합니다.

관련 정보