sedを使用してbashで変数のテキスト処理が予想される(修正された)出力を提供しませんか?

sedを使用してbashで変数のテキスト処理が予想される(修正された)出力を提供しませんか?

私たちはいくつかの古いコーディングスクリプトを使用しており、それを修正することはできません。だから私はsedを使って入力を自動的に修正する解決策を考えました。これはうまくいきません。フォーラムを調べた後、以下の「解決策」を思い出しましたが、うまくいきません。出力は期待どおりに変更されませんでした。

私が達成したいことは何ですか?

2つの入力があります(したがって、2つの別々のルール/スクリプトが必要です)。 1つは4文字ごとにマイナス記号を追加し、もう1つは6文字ごとにマイナス記号を追加します。

例1入力:

0HU1L1LQXRFF2W8146LXX5WL

次の形式で指定する必要があります。

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

例2入力:

C00W00M9JN0777XT06XJHFGCM7Y195

次の形式で指定する必要があります。

C00W00-M9JN07-77XT06-XJHFGC-M7Y195

上記に基づいて、2つの別々のルールが必要ですが、これは私にとって問題ではありません。

それでは、私は今まで何を試しましたか?

ここと他のフォーラムを調べたところ、次のコマンドが両方の場合に機能することがわかりました。

例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つだけが別の明白なものに翻訳します。

よろしくお願いします。

ベストアンサー1

テストでは、echo値をstdoutに送信してパイプに送信しましたが、スクリプトにはそのまま残しました。また、$コマンド置換を実行するには追加の項目が必要です。

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

希望の結果が得られます。

おすすめ記事