sed 대체에 명령 사용

sed 대체에 명령 사용

sed를 사용하여 동일한 문자 시퀀스를 해당 시퀀스의 문자 수로 바꾸려고 하는데 뭔가 문제가 발생했습니다.

나는 다음을 시도하고 있습니다 :

echo aaabbdd | sed -e 's/a*/'"`wc -m &`/"

하지만 이것이 반환 0bbdd되고 나는 그것이 반환되기를 원합니다 3bbdd.

무슨 일이 일어나고 있는지 정말 모르겠습니다. sed는 무엇을 교체해야 할지 알고 wc 명령을 실행하려고 시도하지만 어떻게 든 wc가 비어 있는 것으로 계산됩니까? 이 문제를 해결하는 방법을 모르겠습니다. 누구든지 도와주실 수 있나요?

감사합니다!

답변1

당신이 달성하고 싶은 것은 실제로 가능하지만 GNU sed를 통해서만 가능합니다.이자형주문하다. 따라서 이식성 문제가 마음에 들지 않는다면 시도해 볼 수 있습니다.

예를 들어, 귀하의 예는 다음과 같습니다:

>echo aaabbdd | sed -e 's/a*/echo `echo -n & | wc -m`/;e'
3bbdd

삭제하면;이자형, 중간 명령이 표시됩니다(두 개의 에코가 있는 이유를 이해하는 데 도움이 됩니다).

echo `echo -n aaa | wc -m`bbdd

여러 일치 항목을 교체하려는 경우 이는 더 까다로울 수 있지만 교체 항목을 연결하여 수행할 수 있습니다.

>echo aabbaadd | sed -re 's/a+/`echo -n &|wc -m`/g;s/.*/echo &/;e'
2bb2dd

물론 다음과 같이 작업에 더 나은 도구가 있습니다., 내장된 기능길이()기능.

인용하다:

폴리스티렌

또한 입력 데이터에 따옴표가 포함되어 있으면 이를 조심스럽게 이스케이프 처리하거나 임시로 바꿔야 합니다(예: sed y/// 명령 사용).

관련 정보