Hej.
Den 30 mar 2015 16:00 skrev <jan@lillahusetiskogen.se>:
>
> Jag behöver en fil som innehåller en datumsträng utan LF i slutet.
> Skulle naturligtvis kunna skriva ett C-program som ger mig exakt det
> men jag skulle vilja göra det i ett bash-script.
Vilket är program, så det fungerar.
> Nedanstående fungerar men det känns väldigt yxigt, speciellt
> sed-kommandot. Någon som har ett bättre förslag?
>
> date +"%Y%m%d_%H%M%S" > tmp
> sed s/\
> // tmp > NEWDATE 2> /dev/null
Varför pipar du inte utmatningen från date(1) direkt in i sed(1)?
$ date +%Y%m%d_%H%M%S | sed -e s/\n// -
Annars så läser man på manualsidan för date och ser att ISO8601 stöds direkt (exempelvis med växeln --Isecond till date) eller för datum kan %x eller %F var bra val och tid %X eller %T kan vara lämpliga val, om formatet inte är hugget i sten. Notera skillnaden mellan x och F och X T i manualsidan. Samt att växeln -n till echo(1) inte skriver ut något nyradstecken.
$ date +%x_%X
2015-03-30_17:28:47
$ date +%F_%T
2015-03-30_17:28:49
$ mydate=$(date +%F_%T | sed -e "s/-//g" -e "s/://g" -)
$ echo -n $mydate | hexdump -C
00000000 32 30 31 35 30 33 33 30 5f 31 37 32 37 31 31 |20150330_172711|
0000000f
eller för ANSI-standard och inte bashism, dvs `` istf $()
$ echo -n `date +%F_%T | sed -e "s/-//g" -e "s/://g" -` | hexdump -C
00000000 32 30 31 35 30 33 33 30 5f 31 37 33 32 32 37 |20150330_173227|
0000000f
eller använd tr(1) för att ta bort tecken
$ date +%F_%T | tr -d "[:space:]:-" | hexdump -C
00000000 32 30 31 35 30 33 33 30 5f 31 37 32 34 34 37 |20150330_172447|
0000000f
eller använd printf(1) eller perl(1) eller python(1) för att ta bort \n. Men enklast är nog echo(1) med växeln -n samt att exekvera date(1) i ett "Command Substitution", se manualsidan för bash(1).
man 1 bash # skriv sedan /\$\( följt av enter och / följt av enter tills du hittar $(command), då backar du ett steg med b.
> Med hopp om svar.
> /Janne
/Jackson
PS:
Tack Michael för hexdump(1)
DS: