Hej. Den 30 mar 2015 16:00 skrev <j...@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: