Bash에서 단어 중 하나에 ":"가 포함된 문자열의 두 단어를 변경하는 방법

Bash에서 단어 중 하나에 ":"가 포함된 문자열의 두 단어를 변경하는 방법

나는 2개의 배열을 반복하는 스크립트를 만들기 위해 최선을 다했습니다. 변경된 부분이 포함된 명령을 실행하려면 배열의 각 값에 ExecuteSyncoid호출되는 문자열을 기반으로 문자열 에 값을 입력해야 합니다.SyncoidCommand


이 문자열은

SyncoidCommand

SyncoidCommand변경해야 할 명령/문자열은 다음과 같습니다.

SynCoid-IterateThroughDataSets.sh -s /home/darkyere/Scripts/Syncoid/shortsourcelist -d /home/darkyere/Scripts/Syncoid/shortdestinationlist -c "syncoid <username>@XXX.XXX.XXX.XXX:SourceDataSet DestDataSet --compress none --sshcipher [email protected] --sshport <Port> --sshkey "/Dest/To/KeyFile" --no-privilege-elevation" -p <Password>

지금 변경해야 할 두 부분은 다음과 같습니다.

<username>@XXX.XXX.XXX.XXX:SourceDataSet DestDataSet

두 가지 문제는 어디에서 논의됩니까 SourceDataSet?DestDataSet

장기적으로는 아래와 같이 반대 방향으로도 작동해야 합니다.

SourceDataSet <username>@XXX.XXX.XXX.XXX:DestDataSet

나는 이러한 다양한 접근 방식을 시도했지만 일부 시도에서 유지하지 못한 것이 있습니다.

이것

$SourcePath

# And

$DestPath

"ExecuteSyncoid"에 삽입하려는 두 배열의 값입니다.

ExecuteSyncoid="${SyncoidCommand/SourceDataSet/$SourcePath}"  
ExecuteSyncoid="${SyncoidCommand/DestDataSet/$DestPath}"

# ----------


ExecuteSyncoid=$(echo $SyncoidCommand | sed "s+SourceDataSet+$SourcePath+g")
ExecuteSyncoid=$(echo $SyncoidCommand | sed "s+DestDataSet+$DestPath/+g")

하지만 변경된 문자열은 항상 다음과 같습니다.

syncoid <username>@XXX.XXX.XXX.XXX:SourceDataSet Storage/WallaBag --compress none --sshcipher [email protected] --sshport <Port> --sshkey "/Dest/To/KeyFile" --no-privilege-elevation" -p <Password>

따라서 코드를 변경하는 데에는 문제가 없습니다 DestDataset.

하지만 내가 게시한 것 이상을 포함하여 모든 시도에도 불구하고 결코 바뀌지 않았습니다.

<username>@XXX.XXX.XXX.XXX:SourceDataSet

기다리다.

<username>@XXX.XXX.XXX.XXX:Storage/WallaBag

문자열에서 ":"가 있는 부분을 변경하는 데 도움이 될 수 있는 bash 지식을 가진 사람이 있습니까?

<username>@XXX.XXX.XXX.XXX:SourceDataSet DestDataSet

# Or

SourceDataSet <username>@XXX.XXX.XXX.XXX:DestDataSet

Dakel을 읽어주셔서 감사합니다.

답변1

(답변은 질문 편집자에서 커뮤니티 위키 답변으로 이동되었습니다.)

이건 오류야

ExecuteSyncoid="${SyncoidCommand/SourceDataSet/$SourcePath}"  
ExecuteSyncoid="${SyncoidCommand/DestDataSet/$DestPath}"

Philippos의 도움 덕분에 이 문제가 해결되었습니다.

ExecuteSyncoid="${SyncoidCommand/SourceDataSet/$SourcePath}"  
ExecuteSyncoid2="${SyncoidCommand/DestDataSet/$DestPath}"

첫 번째 문자열을 두 번째 문자열로 덮어쓰는 것만큼 간단합니다. 두 번째 찌르기를 바꾼 후 작동했습니다.

감사합니다. 좋은 하루 되세요.

관련 정보