私たちはいくつかの古いコーディングスクリプトを使用しており、それを修正することはできません。だから私は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'-' -)
希望の結果が得られます。