Sida 1 av 1

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

Postat: 19 feb 2011, 22:40
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å.

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

Postat: 20 feb 2011, 07:45
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}'`

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

Postat: 20 feb 2011, 11:10
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.

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

Postat: 21 feb 2011, 00:14
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'

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

Postat: 21 feb 2011, 18:15
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å.