이건 사소한 작업일 것 같은데, 도저히 알 수 없어서 물어보기로 했습니다. 전체 줄을 바꿔야 하는데 마지막 문자는 선택 사항입니다. 예를 들어, 나는 다음을 원합니다.
abcd
to be efgh
그러나
abcd,
to be efgh,
이와 같은 정규식을 어떻게 만들 수 있습니까? 선택적 문자는 거꾸로 참조할 수 없는 것 같습니다. 즉 다음과 같습니다. s/.*\(,\)?$/efgh\1
작동하지 않습니다(시도했습니다 :) 명확성을 위해 행은 임의 길이의 임의 문자입니다. 내 경우 유일한 조건은 교체 후 줄 끝에 쉼표를 유지하거나 줄이 쉼표로 끝나지 않으면 제거하는 것입니다.
답변1
또 다른:
$ echo -e "abcd\nabcd," | sed 's/.*\($\|,\)/efgh\1/'
efgh
efgh,
이는 캡처링 그룹의 $
줄 끝이나 쉼표와 일치합니다 .,
답변2
나는 당신이 다음을 언급하고 있다고 생각합니다 :
's/[a-z]\+\([^a-z]\{0,1\}\)$/efgh\1/g'
sed 명령 + 출력 완료:
$ echo "abcd," | sed 's/[a-z]\+\([^a-z]\{0,1\}\)$/efgh\1/g'
efgh,
$ echo "abcd" | sed 's/[a-z]\+\([^a-z]\{0,1\}\)$/efgh\1/g'
efgh