sed 이스케이프 문자의 예외 처리

sed 이스케이프 문자의 예외 처리

%a부터 줄 끝까지 모두 삭제하고 싶습니다 . 사용

cat /tmp/foo.txt | sed 's/%.*$//'

한 가지 예외를 제외하고는 훌륭하게 작동합니다. 무시하고 싶습니다.어느이스케이프 백분율 기호 \%. 따라서 다음 파일을 다음과 같이 저장하십시오./tmp/foo.txt

abcd %123
xyz \%xyz
xyz \%xyz %123

내가 원하는 출력은

abcd 
xyz \%xyz
xyz \%xyz

이를 수행하는 데 적합한 일반적인 예외 처리는 무엇입니까?

답변1

백분율 앞에 있는 문자를 살펴봐야 합니다.

sed 's/\([^\\]\)%.*/\1/'

이전 문자가 백슬래시가 아닌 경우 해당 문자는 유지되고 나머지 문자는 제거됩니다.

%이 답변은 줄 시작 부분에 발생하지 않는다고 가정합니다 . 그렇다면 우리는 확인해야 합니다

sed 's/\(^\|[^\\]\)%.*/\1/'

관련 정보