例えば、以下は md5sum コマンドの出力です。
35c9581c469c366e286be708a9d9f939 input.txt
これは私が実行しているコマンドラインです。
md5sum input.txt | sed -f script.sed
md5sumの出力は次のようになります。
35c9xxxxxxxxxxxxxxxxxxxxxxxxxxxx input.txt
現在、私の.sedスクリプトには、最初の4文字を除くすべての内容を編集する次の内容が含まれています。
s/./x/5g
スペース「」が見つかったら、この操作を停止する必要があります
。どんなアイデアがありますか?
ベストアンサー1
if(md5sum) hash;これはこれを行います(中括弧拡張をサポートするシェルで)。
sed -e's/./x/'{5..32} infile
else 最初の文字スペースが表示されるまで、すべての文字長に対して以下を行います。
sed
一般的な解決策として、およびを使用してください。
sed -E ':a s/^(.{4}x{0,})[^x ]/\1x/;ta' infile
:a
はsed私たちの名前付きタグa
s/
以下の一致を交換してください。^
行アンカーポイントの始まりです。(
グループ予選開始.
単一文字の一致.{4}
4文字(または....
)のみが一致し、次の文字と一致します。x{0,}
0文字以上x
(またはx*
)
)
グループマッチが終了し、リバース参照は\1
[^x ]
文字列を除くすべての文字と一致しますx
。^
文字が開かれた直後に最初の文字の場合は、否定一致が行われます。)[
[^...]
/
以下で\1
は上記の一致部分の逆参照である(...)
ため、最初の部分は再び所定の位置にありますが、x
後で追加のコンテンツが追加されます。- そして一つ、上で私たちは別れ予選で得点でき
x
なかったという事実を覚えていますか?今一つずつ入れ替えるキャラクターたちです。[^x ]
(...)
x
/
交換終了;
新しいコマンドの開始ta
a
交換が成功するとラベルに移動します。それ以外の場合は、すべての文字を次のように置き換えました。これは、置き換えてコマンドをx
終了する文字が残っていないことを意味します。sed