sed를 사용하여 bash에서 변수의 텍스트 처리가 예상된(수정된) 출력을 제공하지 않습니까?

sed를 사용하여 bash에서 변수의 텍스트 처리가 예상된(수정된) 출력을 제공하지 않습니까?

우리는 일부 오래된 코딩 스크립트를 사용하고 있으며 이를 수정할 수 없습니다. 그래서 sed를 사용하여 입력을 자동으로 수정하는 솔루션을 생각했습니다. 이것은 작동하지 않습니다. 포럼을 조사한 후 아래의 "해결책"을 생각해 냈지만 작동하지 않습니다. 출력이 예상대로 수정되지 않았습니다.

내가 달성하고 싶은 것은 무엇입니까?

두 개의 입력이 있습니다(따라서 두 개의 별도 규칙/스크립트가 필요함). 하나는 4자마다 빼기 기호를 추가하고, 다른 하나는 6자마다 빼기 기호를 추가합니다.

예시 1 입력:

0HU1L1LQXRFF2W8146LXX5WL

다음과 같은 형식으로 지정해야 합니다.

0HU1-L1LQ-XRFF-2W81-46XX-L5WL

예시 2 입력:

C00W00M9JN0777XT06XJHFGCM7Y195

다음과 같은 형식으로 지정해야 합니다.

C00W00-M9JN07-77XT06-XJHFGC-M7Y195

위의 내용을 바탕으로 두 가지 별도의 규칙이 필요하지만 이는 나에게 문제가 되지 않습니다.

그렇다면 나는 지금까지 무엇을 시도했는가?

여기와 다른 포럼을 조사한 결과 다음 명령이 두 경우 모두에 작동한다는 것을 발견했습니다.

예시 1:

echo "0HU1L1LQXRFF2W8146LXX5WL" | fold -w4 | paste -sd'-' -
Result: 0HU1-L1LQ-XRFF-2W81-46XX-L5WL

완벽한!

예 2:

echo "C00W00M9JN0777XT06XJHFGCM7Y195" | fold -w6 | paste -sd'-' -
Result: C00W00-M9JN07-77XT06-XJHFGC-M7Y195

완벽해요!

하지만...

이것을 변수 기반 bash 스크립트로 변환하는 데 문제가 있습니다. 나는 다음을 시도했다:

#!/bin/sh
example=C00W00M9JN0777XT06XJHFGCM7Y195
echo "Unedited:"
echo $example
echo " "
echo "Modified:"
stripped=($example | fold -w6 | paste -sd'-' -)
echo $stripped

위와 같이 하면 다음과 같은 오류가 발생합니다. 예상치 못한 마커 '|' 근처에서 구문 오류가 발생했습니다.

그래서 다음과 같이 "|"를 이스케이프 처리하여 수정했습니다.

example=C00W00M9JN0777XT06XJHFGCM7Y195
echo "Unedited:"
echo $example
echo " "
echo "Modified:"
stripped=($example \| fold -w6 \| paste -sd'-' -)
echo $stripped

위의 오류가 발생하지 않지만 예상대로 작동하지 않습니다. 두 결과는 동일하거나 $stripped 사이에 빼기 기호(-)가 없는 것이 더 좋습니다.

누군가 내가 여기서 뭘 잘못하고 있는지, 어떻게 해결하는지 친절하게 말해 줄 수 있을까요?

참고로 4~6자 사이에 빼기 기호(-)를 추가하는 "결합" 스크립트는 필요하지 않습니다. 그 중 하나만 다른 명백한 것으로 번역하겠습니다.

미리 감사드립니다.

답변1

테스트에서는 echo값을 stdout으로 보낸 다음 파이프로 보냈지만 스크립트에는 그대로 두었습니다. 또한 $명령 대체를 수행하려면 추가 항목이 필요합니다.

stripped=$(echo $example | fold -w6 | paste -sd'-' -)

원하는 결과를 얻을 것입니다.

관련 정보