sed: 0 を入力し、数値文字列を特定の数値に拡張します。

sed: 0 を入力し、数値文字列を特定の数値に拡張します。

私は現在sedにパイピングしてエコーされた英数字文字列を修正しようとしています。私が修正したい領域は、前に適切な数のゼロを挿入して8文字の長さにしたい数値ブロックです。たとえば、

入力する:

loremipsumdolorsit2367amet

希望の出力:

loremipsumdolorsit00002367amet

sedを使用してこれを実行できますか?私が扱っている数字のブロックは8文字未満です。わからないこれ投稿は非常に便利です。

編集:各文字列には1つの数値セットしかありません。

ベストアンサー1

これは、数字の後に数字ではなくテキストが続くと仮定します。

echo "loremipsumdolorsit2367amet" \
| sed -r -e 's/[0-9]/0000000&/' -e 's/0*([0-9]{8}[^0-9])/\1/'

結果:loremipsumdolorsit00002367amet

これは次のことを前提としていません。

... | sed -r -e 's/[0-9]/0000000&/' -e 's/0*([0-9]{8}([^0-9]|$))/\1/'

彼らはsedのEREモードを使用します。多くのsed実装はこの-rフラグを使用してそれを指定します。一部-Eでは、両方のフラグを使用します。現在、sedでEREモードを使用する機能はPOSIX標準の一部ではありませんが、標準に追加するための議論が進行中です。私は何らかの方法でEREモードを使用しない最新のsed実装をまだ見たことがありません。

場合によっては、デフォルトのsedモード(BRE)を使用して実行できない操作は、EREモードを使用して実行されることがあります。バラよりこの回答へのコメント。しかし、現在の状況では、EREモードを使用するのは便宜のためだけです。 schがコメントで述べたように、-r(または)フラグを省略してwithとに-E置き換えることができます。私の元の答えはBREパターンの一部ではなくBREを使用しましたが、実際にはソリューションには必要ありません。(...)\(...\){8}\{8\}+

おすすめ記事