後ろから数えて、特定のインデックスの文字を置き換えます。

後ろから数えて、特定のインデックスの文字を置き換えます。

私が作成した文字列のいくつかの文字を変更したいと思います。ファイルのリストを作成し、各ファイルに「統計」情報を追加する必要があります。たとえば、ファイル名は "K181_111126.CATProduct""K181_111126.CATProduct.2011-11-28 13:33:33.722342000 +0100"不要な最後の16文字は、次のように解決しました。

find . -type f -exec stat -c%n.%y {} \; | sed 's/.\{16\}$//'

結果:"K181_111126.CATProduct.2011-11-28 13:33:33" 私の問題は、日付と時刻(次の9文字目)の間のスペースを「-」に変更し、時間(13:33:33)のすべての「:」をドット「」に変更する必要があることです。
ロープの長さがすべて違うので、後ろから数えるしかありません。

ベストアンサー1

スペースとコロンの両方を変更するには、少し長い正規表現を使用します。

find . -type f -exec stat -c%n.%y {} \; |
sed 's/ \(..\):\(..\):\(..\).\{16\}$/-\1.\2.\3/'

最後の 24 番目の文字より前のスペースと一致し、次の 2 文字、コンマ、次の 2 文字、コンマ、および別の 2 文字を一致させ、キャプチャし、最後の 16 文字を一致させ、すべてのコンテンツに置き換えます。キャプチャされた最初の式は、逆参照を使用して呼び出すことができます\1(2番目は\2などを使用して)。言い換えれば、空白の後ろの2つの数字はそれ自体「代替」されます。つまり、効果的に維持され、ポイント、次の2つの数字などが続きます。

おすすめ記事