!exist가 있는 경우에만 sed 및 sed를 사용하여 특정 문자열로 시작하는 줄을 개별적으로 바꿉니다.

!exist가 있는 경우에만 sed 및 sed를 사용하여 특정 문자열로 시작하는 줄을 개별적으로 바꿉니다.

이것이 내가 sed를 사용하여 달성하고 싶은 것이지만 지금까지는 주사위가 없습니다.

sed '/^command=/ /\/opt\/home\/user/!s@/home/user/@/opt/home/user/@' authorized_keys

@는 슬래시를 더 쉽게 볼 수 있도록 대체하기로 선택한 재미있는 구분 기호입니다.

기본적으로 정규식에서 수행하려는 작업은 다음과 같습니다. "문자열: command=로 시작하는 파일의 모든 줄에서 문자열: /opt/home/user가 없으면 /opt/user를 /opt /home/으로 바꾸십시오. 사용자”

이론적으로는 if 문, grep 및 sed를 사용하여 이 작업을 수행할 수 있다는 것을 알고 있지만 이는 나에게 그다지 우아해 보이지 않습니다. 나는 sed가 한 줄의 정규식으로 이 작업을 자체적으로 수행할 수 있다고 확신하지만, 내가 시도한 모든 조합은 나에게 모든 종류의 구문 오류를 제공하는 것 같습니다. 이상한 점은 정규식 문만 단독으로 사용하면 대체 문과 결합할 때 구문 오류가 발생하지 않고 이를 결합하려고 할 때만 문제가 발생한다는 것입니다.

sed를 사용하여 이 작업을 수행하는 더 우아한 방법이 있는 사람이 있습니까? 아니면 grep 및 sed 앞의 if 문이 이 작업을 수행하는 가장 좋은 방법이라고 가정하는 것이 맞습니까?

답변1

돈 크리스티제안우아한 솔루션의견에는 교육 목적으로 여기에 다른 변형이 있습니다.

sed '/^command=/! b; \@/opt/home/user@! s@/home/user@/opt&@' authorized_keys

관련 정보