|
| 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
| |
|
|