Bashで単語の1つに「:」を含む文字列の2つの単語を変更する方法

Bashで単語の1つに「:」を含む文字列の2つの単語を変更する方法

私は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>

今変更する必要がある2つの部分は次のとおりです。

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

2つの問題はどこで議論されていますかSourceDataSetDestDataSet

長期的には、以下のように逆方向にも動作する必要があります。

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

私はこれらのさまざまなアプローチを試しましたが、いくつかの試みでは維持できなかったものがあります。

これ

$SourcePath

# And

$DestPath

「ExecuteSyncoid」に挿入する2つの配列の値。

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}"

最初の文字列を2番目の文字列で上書きするのと同じくらい簡単です。 2回目の突き刺しを変えた後に働いた。

ありがとうございます。良い一日になってください。

関連情報