日付出力から先行ゼロを削除する


40

dateコマンドのエイリアスを作成して、次の形式で日付を表示しました。

2013.06.14.12.10.02

このコマンドを使用して:

alias date = date +"%Y.%m.%d.%H.%M.%S"

出力から先行ゼロを削除することを除いて、すべてがうまく機能します。

フォーマットを変更してそれを実現する方法はありません。私はそれをsed、やなどの他のコマンドに出力をパイプすることによってのみ行うことができると思いますawk

私が実行しているOSはUbuntu 12.04.2 LTSです。


何もありません末尾のゼロはあなたの例では(まあ、あなたはカウントしない限り010毎時分が、削除変更は、タイムスタンプの意味ということ)。私はそれはあなたが意味取る有数その場合にはゼロ(各日付コンポーネントの先頭にゼロ)、あれば、使用しているA GNUユーザランド@ j883376の答えはおそらく有用であろうが。それ以外の場合は、環境を指定してください(ユーザーランドツールはすべてのUnixライクなOSで同じではなく、すべてのツールでさえそのようなすべてのOSで利用できるわけではありません)。
CVn

はい、タイトルは間違っていましたが、投稿は正しいものでしたが、混乱して申し訳ありません。
easl

心配ない。ただし、一般的なルールとして、常に環境を指定することをお勧めします。OS XはOpenBSDとは異なり、AIXはGNUとは異なります。環境を指定することで、あなたにとって役に立たない答え(例えば、OS Xで問題を解決しようとしているときにLinuxの/ procを使用することを提案する答えなど)を取得するリスクはありません。
CVn

2
ご注意:先行ゼロを削除すると、必要に応じてそれらの日付で並べ替えることが難しくなることに注意してください。
ドゥブ14

この投稿を参照してください:stackoverflow.com/questions/47880412/…–
codeforester

回答:


74

GNU dateマンページによると:

   By default, date  pads  numeric  fields  with  zeroes.   The  following
   optional flags may follow '%':

   -      (hyphen) do not pad the field

したがって、あなたができる

alias date="date '+%Y.%-m.%-d.%-H.%-M.%-S'"

そして受け取る

2013.6.14.3.19.31

書式設定の正しい構文がstackoverflow.com/questions/29659069/…
user13107

4

ばかげているように感じますが、この質問にはがタグ付けされ/sedているため、これはsedでこれを行う方法です。

alias date='date +"%Y.%m.%d.%H.%M.%S" | sed "s/^0*//g; s/\.0*/./g"'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.