/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
shell: fjern fileext fra output
Fra : Kim Emax


Dato : 19-12-05 16:09

Hejsa

jeg har følgende:

for a in *.txt; do echo "File $a"; done;

som giver

1.txt
2.txt osv...

Hvordan kan jeg fjerne fileextensions? så jeg kun får "1", "2" osv?

Jeg skal bruge det til at hælde ind i et shell script, så alternativt
kunne jeg også strippe det, derinde, men det volder mig også problemer.
Syns ikke jeg kan få grep og egrep til at makke ret, regular expressions
volder mig ellers aldrig problemer, så det er syntaxen jeg ikke fanger

mvh
Kim Emax

 
 
Adam Sjøgren (19-12-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 19-12-05 16:15

On Mon, 19 Dec 2005 16:08:47 +0100, Kim wrote:

> for a in *.txt; do echo "File $a"; done;

> som giver

> 1.txt
> 2.txt osv...

> Hvordan kan jeg fjerne fileextensions? så jeg kun får "1", "2" osv?

Hvis du bruger bash kan du bruge ${a/.txt/} - eks.:

$ for a in 1.txt 2.txt 3.txt; do echo ${a/.txt/}; done
1
2
3
$

(Hvis der ikke står .txt tidligere i filnavnene også, altså


Mvh.

--
"The concert is finito, my friends, goodnight!" Adam Sjøgren
asjo@koldfront.dk

Kim Emax (19-12-2005)
Kommentar
Fra : Kim Emax


Dato : 19-12-05 16:24

Adam Sjøgren wrote:

> Hvis du bruger bash kan du bruge ${a/.txt/} - eks.:
>
> $ for a in 1.txt 2.txt 3.txt; do echo ${a/.txt/}; done
> 1
> 2
> 3
> $
>
> (Hvis der ikke står .txt tidligere i filnavnene også, altså

Lovely, det gør, hvad jeg vil men, jeg måtte lige lege lidt. Hvordan
bruger man $ til at afgøre det er slutningen på linien eller filnavnet?
Dette gik ikke:

for a in *.txt$; do echo ${a/.txt/}; done

så prøvede jeg

for a in *.txt; do echo ${a/.txt$/}; done

Heller ikke?

Og havde du et tip til RegEx i et shell script? Mit problem er vist så
simpelt som at jeg ikke kan gennemskue, hvilket prg, der kan lave
search/replace for mig på commandline

/Kim

Peter Makholm (19-12-2005)
Kommentar
Fra : Peter Makholm


Dato : 19-12-05 17:02

Kim Emax <newsgroup@emax.dk> writes:

> Lovely, det gør, hvad jeg vil men, jeg måtte lige lege lidt. Hvordan
> bruger man $ til at afgøre det er slutningen på linien eller
> filnavnet? Dette gik ikke:

Det gør man ikke, det er ikke regulære udtryk men glob(3)'ing (den
måde shell'en normalt udfolder filnavne på).

Nu vil jeg jo ikke ødelægge Adams opgave, men løsningen står i
manualsiden til bash hvor ${paramter/patern/string} er dokumenteret.

--
Peter Makholm | What if:
peter@makholm.net | Tanenbaum had convinced Linus that his
http://hacking.dk | operating system really was obsolete

Jacob Tranholm (19-12-2005)
Kommentar
Fra : Jacob Tranholm


Dato : 19-12-05 16:21

Kim Emax skrev:
> Hejsa
>
> jeg har følgende:
>
> for a in *.txt; do echo "File $a"; done;
>
> som giver
>
> 1.txt
> 2.txt osv...
>
> Hvordan kan jeg fjerne fileextensions? så jeg kun får "1", "2" osv?
>
> Jeg skal bruge det til at hælde ind i et shell script, så alternativt
> kunne jeg også strippe det, derinde, men det volder mig også problemer.
> Syns ikke jeg kan få grep og egrep til at makke ret, regular expressions
> volder mig ellers aldrig problemer, så det er syntaxen jeg ikke fanger
>
> mvh
> Kim Emax

Prøv i stedet:
for a in *.txt; do echo "File $(basename $a .txt)"; done

--
Mvh. Jacob Tranholm
http://jtranholm.dk/

Kim Emax (19-12-2005)
Kommentar
Fra : Kim Emax


Dato : 19-12-05 16:26

Jacob Tranholm wrote:

> Prøv i stedet:
> for a in *.txt; do echo "File $(basename $a .txt)"; done

virker næsten, lige indtil man har mellemrum i filnavnet (kunder!)

for a in *.txt; do echo "File $(basename "$a" .txt)"; done

er sagen, tak.

Og interessant at se at there´s more than one way to do it

/Kim

Adam Sjøgren (19-12-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 19-12-05 16:49

On Mon, 19 Dec 2005 16:23:32 +0100, Kim wrote:

>> $ for a in 1.txt 2.txt 3.txt; do echo ${a/.txt/}; done

> Lovely, det gør, hvad jeg vil men, jeg måtte lige lege lidt. Hvordan
> bruger man $ til at afgøre det er slutningen på linien eller
> filnavnet?

Det véd jeg ikke. Jeg prøvede også med '$', for det plejer det at være
(Perls regexps og venner), men bash bruger tilsyneladende noget andet
logik dér.

Måske skal det escapes eller noget - det efterlod jeg som en øvelse
til spørgeren (ligeledes at lave en POSIX-udgave)


Mvh.

--
"The concert is finito, my friends, goodnight!" Adam Sjøgren
asjo@koldfront.dk

Adam Sjøgren (19-12-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 19-12-05 17:06

On Mon, 19 Dec 2005 17:02:08 +0100, Peter wrote:

> Det gør man ikke, det er ikke regulære udtryk men glob(3)'ing (den
> måde shell'en normalt udfolder filnavne på).

Ahhh! Det er den velkendte syntaks .../... der får mig til at tænke
regexp.

> Nu vil jeg jo ikke ødelægge Adams opgave, men løsningen står i
> manualsiden til bash hvor ${paramter/patern/string} er dokumenteret.

- Den manual-side er et af mine yndlingshadeobjekter. Jeg kan
aldrig finde noget i den.


Mvh.

--
"The concert is finito, my friends, goodnight!" Adam Sjøgren
asjo@koldfront.dk

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste