sed – det står still i min obefintliga hjärna… [LÖST]

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

sed – det står still i min obefintliga hjärna… [LÖST]

Inlägg av Johnny Rosenberg »

Vad jag försöker göra är att dela upp ett befintligt datum i tre variabler. Följande kod fungerar utmärkt så länge datum är enligt ISO-8601, nämligen exempelvis 2011-02-19 för dagens datum:

Kod: Markera allt

	RecordingDate=$(metaflac --show-tag=DATE ${SoundFile} |	\
		sed 's/DATE=//')
	Year=$(echo $RecordingDate | sed 's/\(.*\)-.*-.*/\1/')
	Month=$(echo $RecordingDate | sed 's/.*-\(.*\)-.*/\1/')
	Day=$(echo $RecordingDate | sed 's/.*-.*-\(.*\)/\1/')
Problemet är att datum i mina FLAC-filer ibland bara är ett årtaĺ, exempelvis ”2011”. Då får jag ”2011” för såväl Month som Day, så att "${Year}-${Month}-${Day}" blir "2011-2011-2011". Inte så snyggt, kanske…

Så vad jag skulle önska är att om inte hela uttrycket matchar så ska svaret bli en tom sträng, men jag har inte lyckats komma på hur man gör detta.

Visserligen kan jag lösa det ändå, men det är intressant att lära sig saker också.
Senast redigerad av 1 Johnny Rosenberg, redigerad totalt 20 gånger.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
johanre
Serveradmin
Inlägg: 3888
Blev medlem: 22 okt 2006, 09:13
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Malmö

Re: sed – det står still i min obefintliga hjärna…

Inlägg av johanre »

Det går säkert att få till med sed, men jag skulle använt awk:

Year=`echo $RecordingDate | awk -F "-" '{print $1}'`
Month=`echo $RecordingDate | awk -F "-" '{print $2}'`
Day=`echo $RecordingDate | awk -F "-" '{print $3}'`
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: sed – det står still i min obefintliga hjärna…

Inlägg av Johnny Rosenberg »

johanre skrev:Det går säkert att få till med sed, men jag skulle använt awk:

Year=`echo $RecordingDate | awk -F "-" '{print $1}'`
Month=`echo $RecordingDate | awk -F "-" '{print $2}'`
Day=`echo $RecordingDate | awk -F "-" '{print $3}'`
Det där såg ju riktigt användarvänligt ut! Att jag inte tänkte på det! Men det är ju orutin, så klart. Har ju knappt använt awk tidigare, mer än testat ett och annat exempel jag hittat någonstans.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: sed – det står still i min obefintliga hjärna… [LÖST]

Inlägg av Konservburk »

För att svara på frågan när det gäller just sed så kan du t.ex. använda -n och p så här:

Kod: Markera allt

sed -n 's/sök/ersätt/p'
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: sed – det står still i min obefintliga hjärna… [LÖST]

Inlägg av Johnny Rosenberg »

Konservburk skrev:För att svara på frågan när det gäller just sed så kan du t.ex. använda -n och p så här:

Kod: Markera allt

sed -n 's/sök/ersätt/p'
Tackar! Funkar, det också.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Terminalforum"