de-vraag
  • Kysymykset
  • Tunnisteet
  • Käyttäjät
Ilmoitukset
Palkinnot
Rekisteröinti
Kun olet rekisteröitynyt, sinulle ilmoitetaan vastauksista ja kommenteista kysymyksiisi.
Kirjaudu sisään
Jos sinulla on jo tili, kirjaudu sisään ja tarkista uudet ilmoitukset.
Lisätyt kysymykset, vastaukset ja kommentit palkitaan.
Lisää
Lähde
Muokkaa
 ibz
ibz
Kysymys

Pura tiedostonimi ja tiedostopääte Bashissa

Haluan saada tiedostonimen (ilman laajennusta) ja laajennuksen erikseen.

Paras tähän mennessä löytämäni ratkaisu on:

NAME=`echo "$FILE" | cut -d'.' -f1`
EXTENSION=`echo "$FILE" | cut -d'.' -f2`

Tämä on väärin, koska se ei toimi, jos tiedostonimi sisältää useita .-merkkejä. Jos minulla on esimerkiksi a.b.js, se katsoo a ja b.js eikä a.b ja js.

Se voidaan tehdä helposti Pythonissa komennolla

file, ext = os.path.splitext(path)

mutta en haluaisi käynnistää Python-tulkkia vain tätä varten, jos mahdollista.

Onko parempia ideoita?

1951 2009-06-08T14:00:29+00:00 3
Benjamin W.
Benjamin W.
Muokattu kysymysT11 heinäkuu 2018 в 3:04
Ohjelmointi
string
bash
filenames
Suosittuja videoita
Tiedoston tallentaminen Chromebookissa
Tiedoston tallentaminen Chromebookissa
2 vuotta sitten
Www-sovellukset: Tiedostot palvelimelle
Www-sovellukset: Tiedostot palvelimelle
6 vuotta sitten
VLC - tiedoston muuntaminen toiseen tiedostomuotoon
VLC - tiedoston muuntaminen toiseen tiedostomuotoon
4 vuotta sitten
Musiikkitiedoston siirto tietokoneen GarageBandin välillä
Musiikkitiedoston siirto tietokoneen GarageBandin välillä
8 vuotta sitten
Vaihto Androidista Applen iPhoneen: tiedostojen siirto
Vaihto Androidista Applen iPhoneen: tiedostojen siirto
5 vuotta sitten
Tiedoston lataaminen OneDriveen ja liittäminen sieltä linkkinä Moodleen
Tiedoston lataaminen OneDriveen ja liittäminen sieltä linkkinä Moodleen
4 vuotta sitten
CS50 2014 - Week 8
CS50 2014 - Week 8
7 vuotta sitten
Näin julkaiset kotisivusi
Näin julkaiset kotisivusi
7 vuotta sitten
Kuvien siirto Android-puhelimesta tietokoneelle kausi 1 jakso 3
Kuvien siirto Android-puhelimesta tietokoneelle kausi 1 jakso 3
2 vuotta sitten
Muistiinpanot ja muistiinpanojen tekeminen OneNote -ohjelmalla | ATK tavis | Microsoft OneNote
Muistiinpanot ja muistiinpanojen tekeminen OneNote -ohjelmalla | ATK tavis | Microsoft OneNote
2 vuotta sitten
OneDrive-pilvitallennus ja tiedostojen jakaminen
OneDrive-pilvitallennus ja tiedostojen jakaminen
4 vuotta sitten
Elisa Toimisto 365 -opasvideo: Onedriven aloittaminen
Elisa Toimisto 365 -opasvideo: Onedriven aloittaminen
3 vuotta sitten
OneDrive: Tiedostojen jakaminen
OneDrive: Tiedostojen jakaminen
5 vuotta sitten
Office 365: OneDrive ja kolme tapaa käyttää
Office 365: OneDrive ja kolme tapaa käyttää
7 vuotta sitten
Top 10 OneDrive for Business Tips and Tricks
Top 10 OneDrive for Business Tips and Tricks
4 vuotta sitten
« Edellinen
Seuraava »
Tässä kysymyksessä on 1 Vastaa englanniksi, voit lukea ne kirjaudu sisään tilillesi.
Ratkaisu / Vastaus
 Petesh
Petesh
T00 kesäkuu 2009 в 2:05
2009-06-08T14:05:19+00:00
Lisää
Lähde
Muokkaa
#9139595

Hae ensin tiedoston nimi ilman polkua:

filename=$(basename -- "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"

Vaihtoehtoisesti voit keskittyä polun viimeiseen '/' -kirjaimeen '.':n sijasta, minkä pitäisi toimia, vaikka tiedostopäätteet olisivat arvaamattomia:

filename="${fullfile##*/}"

Kannattaa tarkistaa dokumentaatio :

  • Webissä kohdassa "3.5.3 Shell Parameter Expansion"
  • bash-manpage-julkaisussa kohdassa "Parameter Expansion".
Ludovic Kuty
Ludovic Kuty
Muokattu vastausta T66 marraskuu 2018 в 5:41
3291
0
 Juliano
Juliano
T00 kesäkuu 2009 в 2:05
2009-06-08T14:05:13+00:00
Lisää
Lähde
Muokkaa
#9139594
~% FILE="example.tar.gz"
~% echo "${FILE%%.*}"
example
~% echo "${FILE%.*}"
example.tar
~% echo "${FILE#*.}"
tar.gz
~% echo "${FILE##*.}"
gz

Lisätietoja on shell parameter expansion Bash-käsikirjassa.

Peter Mortensen
Peter Mortensen
Muokattu vastausta T00 huhtikuu 2015 в 4:58
605
0
 paxdiablo
paxdiablo
T00 kesäkuu 2009 в 2:14
2009-06-08T14:14:37+00:00
Lisää
Lähde
Muokkaa
#9139596
pax> echo a.b.js | sed 's/\.[^.]*$//'
a.b
pax> echo a.b.js | sed 's/^.*\.//'
js

toimii hienosti, joten voit vain käyttää:

pax> FILE=a.b.js
pax> NAME=$(echo "$FILE" | sed 's/\.[^.]*$//')
pax> EXTENSION=$(echo "$FILE" | sed 's/^.*\.//')
pax> echo $NAME
a.b
pax> echo $EXTENSION
js

Komennot toimivat muuten seuraavasti.

Komento NAME korvaa "."-merkin, jota seuraa mikä tahansa määrä muita kuin "."-merkkejä rivin loppuun asti, tyhjällä (eli se poistaa kaiken viimeisestä "."-merkistä rivin loppuun asti). Tämä on periaatteessa ei-ihanaa korvaamista regex-temppuilulla.

Komento EXTENSION korvaa minkä tahansa määrän merkkejä, joita seuraa merkki "." rivin alussa, tyhjällä (eli se poistaa kaiken rivin alusta viimeiseen pisteeseen, piste mukaan lukien). Tämä on ahne korvaaminen, joka on oletusarvoinen toiminto.

 paxdiablo
paxdiablo
Muokattu vastausta T11 syyskuu 2017 в 1:07
32
0
Lisää kysymys
Kategoriat
Kaikki
Teknologia
Kulttuuri / Virkistys
Elämä / Taide
Tiede
Ammattilainen
Liiketoiminta
Käyttäjät
Kaikki
Uusi
Suosittu
1
Jasur Fozilov
Rekisteröity 12 tuntia sitten
2
Zuxriddin Muydinov
Rekisteröity 1 päivä sitten
3
Денис Анненский
Rekisteröity 3 päivää sitten
4
365
Rekisteröity 1 viikko sitten
5
True Image
Rekisteröity 1 viikko sitten
DA
DE
EL
ES
FI
FR
HU
ID
IT
JA
KO
LT
NL
PT
RU
SK
TR
ZH
© de-vraag 2022
Lähde
stackoverflow.com
lisenssillä cc by-sa 3.0 omistusoikeudella