전체 줄을 바꾸고 마지막 선택 문자를 바꾸려면 정규식이 필요합니다.

전체 줄을 바꾸고 마지막 선택 문자를 바꾸려면 정규식이 필요합니다.

이건 사소한 작업일 것 같은데, 도저히 알 수 없어서 물어보기로 했습니다. 전체 줄을 바꿔야 하는데 마지막 문자는 선택 사항입니다. 예를 들어, 나는 다음을 원합니다.
abcdto 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

관련 정보