私は現在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\}
+