Forum » Programiranje » Bash osnove
Bash osnove
konjakk ::
Zanima me kako naredim skript, ki vse datoteke in mape v trenutni mapi, katerih imena se začnejo na b in imajo na predzadnjem mestu črko a preimenuje tako, da jim pred trenutno ime da predpono new._
začel sem z
for file in b* kako pa preveriš za a?
do
mv "$file" "new._$file";
Hvala za pomoč
začel sem z
for file in b* kako pa preveriš za a?
do
mv "$file" "new._$file";
Hvala za pomoč
Brane22 ::
Za čisti bash se mi ni dalo razmišljat, če pa rabiš oneliner, evo hitrega primera kako sem v mapi zlistal fajle, ki se pri meni začnejo na "E" in imajo predzadnjo črko d:
Ostalo lahko hitro dodaš sam.
find . -type f | grep -e "^[./]*E" | grep -E "d."
Ostalo lahko hitro dodaš sam.
Zgodovina sprememb…
- spremenilo: Brane22 ()
matja ::
Če iščeš a v imenu datoteke:
Predzadnji a v končnici pa:
for file in `ls b*a?.*`; do mv $file "new._"$file; done
Predzadnji a v končnici pa:
for file in `ls b*.*a?`; do mv $file "new._"$file; done
MrStein ::
Heh, koliko napačnih predlogov :)
Pravilno je:
Pravilno je:
(shopt -s nullglob ; for fajl in b*a? ; do mv "$fajl" new._"$fajl" ; done)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
MrStein ::
oziroma kot dejanska skripta:
#!/bin/bash shopt -s nullglob for fajl in b*a? ; do mv "$fajl" new._"$fajl" ; done
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
killa bee ::
Zanima me zakaj moja skripta ne dela tako kot mislim da bi morala?
kličem skripto z
in pričakujem nazaj ampak trenutno tega nazaj ne dobim
Skripta:
kličem skripto z
unsuffix testertest test
in pričakujem nazaj ampak trenutno tega nazaj ne dobim
tester
Skripta:
#put the name of the file into the temp file echo $1 > temp$$ #remove the ending real_name=$(sed 's/$2$//' temp$$) echo $real_name
MrStein ::
echo $1 | sed...
Zakaj pa ne uporabiš že obstoječi ukaz basename?
Zakaj pa ne uporabiš že obstoječi ukaz basename?
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
BlaY0 ::
Kaj je pa z rename narobe? Res da je del perla ampak ne vem zakaj bi kompliciral, če je že narejeno...
Razen če imaš to seveda za nalogo in mora biti nujno v bash-u spisano.
Razen če imaš to seveda za nalogo in mora biti nujno v bash-u spisano.
killa bee ::
Imam tak string
S pomočjo grepa bi rad pridobil "08" in to sem poskušal na ta način:
Problem pri tem ukazu je da najde tudi "03". Kako bi spremenil ukaz da bi mi našel samo 'first occurrence' od tega: "..:" ?
sob feb 25 08:03:00 CET 2017
S pomočjo grepa bi rad pridobil "08" in to sem poskušal na ta način:
date | grep '..:'
Problem pri tem ukazu je da najde tudi "03". Kako bi spremenil ukaz da bi mi našel samo 'first occurrence' od tega: "..:" ?
robbmann ::
$ echo 'sob feb 25 08:03:00 CET 2017' | grep -oP '(?<=[a-z]{3} [a-z]{3} \d{2} )\d{2}' 08
Bere se pa nekak tkole: match sta zadnja dva digita: \d{2}
Ko naletis na to, naredis lookbehind assertion - torej se oceni tist izraz, ki je v oklepajih in mora matchat tisto kar je pred \d{2}
Fajn task za sobotno jutro :P
killa bee ::
kako pa z regular expression-om poiščeš naprimer 2nd occurrence nekega pattern-a?
@batt67 - dobim še dvopičje ki ga ne rabim
@robbmann
a je še kak bolj preprost način
če pa ni bom probal s kakšnim drugim ukazom
@batt67 - dobim še dvopičje ki ga ne rabim
$ date | grep -oP ' ..:' 10:
@robbmann
a je še kak bolj preprost način
če pa ni bom probal s kakšnim drugim ukazom
Zgodovina sprememb…
- spremenilo: killa bee ()
robbmann ::
Hja, sem mislil, da si omejen samo na grep. Drugač imaš X rešitev za tvoj problem :D
echo 'sob feb 25 08:03:00 CET 2017' | perl -ne 'print "$1\n" if / (..):/' echo 'sob feb 25 08:03:00 CET 2017' | cut -d":" -f1 | cut -d" " -f4 echo 'sob feb 25 08:03:00 CET 2017' | python -c 'import sys; print(sys.stdin.readline().split()[3].split(":")[0])' echo 'sob feb 25 08:03:00 CET 2017' | awk '{gsub(":"," ",$0);print $4}' echo 'sob feb 25 08:03:00 CET 2017' | php -r '$a = explode(" ",fgets(STDIN));print(substr($a[3],0,2));'
Brane22 ::
date | while read -a namex ; do echo ${namex[3]%%:*} ; done
ali tole:
ali tole:
read -a namex < <(date) ; echo ${namex[3]%%:*}
Zgodovina sprememb…
- spremenilo: Brane22 ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | batch fajl iz txt (strani: 1 2 )Oddelek: Programiranje | 9695 (8356) | b3D_950 |
» | [Bash] - težave z IF stavkiOddelek: Programiranje | 2163 (2062) | R33D3M33R |
» | UNIX, mv, muvanje fajlseOddelek: Pomoč in nasveti | 1277 (1143) | BigWhale |
» | [C++] Problem z datotekami in sortiranjemOddelek: Programiranje | 1317 (946) | BigWhale |
» | Ime Priimek v Ime_Priimek (strani: 1 2 )Oddelek: Programska oprema | 4983 (3943) | Doman |