A bash manuált tényleg nem olvastam.
A sed-re találtam valami példát, ami még ígysem világos, de majd megnézem.
Mindenesetre köszönöm a segítséget.
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
A bash manuált tényleg nem olvastam.
A sed-re találtam valami példát, ami még ígysem világos, de majd megnézem.
Mindenesetre köszönöm a segítséget.
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
sed ''{ s/e'/é/g; s/a'/á/g; s/i'/í/g; s/o'/ó/g; s/o:/ö/g; s/o\''/õ/g; }''
Jester
Azt hiszem elsüllyedek..
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
Sziasztok!
Azért írok nektek, mert segítségre lenne szükségem! Szerintem Ti tudtok segíteni, s nekem ez elég fontos lenne! Kérlek ha tudtok, akkor segítsetek!
Nos a problémám a következő:
Egy kisebb hálózattal próbálkozom, s elakadtam a következő problémánál! (Linux server - windowsos kliensek)
Van nekem egy adott csoportom, minek neve legyen Phoenix, ami pár gépből, pontosabban pár felhasználóból áll! Mindegyiknek megvan a maga jelszava! Én ennek a csoportnak az összes felhasználójának jelszavát szeretném megváltoztatni egyszerre, pwgen-nel úgy, hogy ne legyenek benne z,y,1,I karakterek! Gondolom ezt for ciklussal lehet megírni, miután kiolvastattam a csoport tagjait a group fájlból! Majd ha megváltoztatta akkor azt írja be smbpasswd-del, valamint chpasswd-del a shadow fáljba! Valamint készítsen egy fájlt amit a csoport mindegyik tagja lát, hogy meg tudják nézni az új kódjukat, s utánna meg tudják változtatni, de azt már ne lássa senki, csak az adott felhasználó! Nem tudom, hogy erre milyen scriptet lehetne írni? Kérlek ha tudtok segíteni ebben, akkor segítsetek! Előre is köszönöm!
Phoenix
Sziasztok,
Lenne egy nagy kérésem/kérdésem. Egyik haverom megkért,hogy segítsek, mert muszáj lenne átmennie info-bol, de nagyon nem ért hozzá.
Az alábbi linken a 6. órához tartozó házifeladat példáit, illetve a 7. órai házifeladatot kell neki leadnia.
[link]
Nagyon hálás lennék, ha egy-két feladatot legalább segítenétek megoldani, tényleg nagyon fontos lenne. Ja és valami ''putty''-al kell megcsinálni (talán shell nyelven, ha van olyan, sajna én egyáltalán nem értek hozzá)
Előre is köszi!
"Winners never quit and quitters never win."
A 7es feladat egyetlen tr parancs, csak fel kell sorolni a leképezéseket.
tr ''abcdef .... xyzABCDEF ... XYZ'' ''nopqr ... klmNOPQR ... KLM''
(illetve ugyanez fordítva)
A 6/3 az bonyolult.
A 6/2 az ellenõrzés nélkül kb. ennyi:
x=$1
val=0
shift
while [ $# -gt 0 ]
do
val=$(( val * x + $1 ))
shift
done
echo $val
A 6/1 kb:
UCEN=$1
CH=${2:-28}
D=266
if jodatum ''$UCEN''
then
if [ $CH -lt 29 ]
then
D=$(( D + CH / 2 ))
else
D=$(( D + (CH*17)/30 ))
fi
date -d ''$UCEN + $D days'' +%Y-%m-%d
else
echo hiba
fi
Jester
köszi szépen, átadom havernak, én úgyse értek belőle sajnos egy szót se
"Winners never quit and quitters never win."
tegnap vettem egy könyvet ( UNIX/Linux héjprogramozás ) és kezdek megvilágosodni
egy kérdésem lenne:
hogyan lehet megoldani, hogy az inputot két sorban kérjük be?
Egy fájlnál nincs gond, de parancssorban hogy lehet ezt megoldani ( ez dönti el, hogy fekete vagy fehér lesz a sakkbábú )?
What else you gonna do on a Saturday?
Nem értem a kérdést
2 sort 2 read paranccsal olvasol be.
Jester
akkor ez kellett nekem
eddig számomra ismeretlen volt a read parancs
köszi a segítséget
What else you gonna do on a Saturday?
ha a \ (sortörés) jellel adunk meg inputot, akkor hogyan lehet azt elérni, hogy csak az első 2 sort nézze a script?
Kc6, d6, Bc7, g7
Ba4 b6 Kg8
''Az input egy sakkjáték állás, két sorban. (Az input többi sorával - ha van - nem kell foglalkozni.) Az első sorban a világos figurákat, a másodikban a sötéteket soroljuk fel. Egy figurát 2 vagy 3 jel ad meg. Ebből két jel a figura helye (a1-h8), egy ezeket megelőző jel a figura betűje (B/F/H/V/K, mindig nagybetű), ami elmarad, ha ''gyalog'' a figura. A felsorolást helyköz és/vagy vessző tagolja, a tagoló jelek tetszőleges sorozata is szerepelhet egyetlen elválasztó jel helyett.
Ellenőrizni kell, hogy az input az előző pontbeli szabályoknak megfelel-e. Ha nem, azt hibaként kell kezelni. Az is hiba, ha két figurát ugyanarra a helyre kellene tenni, vagy hiányzik valamelyik király, vagy valamelyik figurából több van, mint a játék kezdetén. (Elvileg lehetne több B/H/F/V a ''gyalogátváltozás'' miatt, de ezt nem engedi meg a feladat.)''
ezeket az ellenőrzéseket hogyan lehetne a legegyszerűbb módon elvégezni?
előre is köszönöm a segítségeket
üdv
peterszky
What else you gonna do on a Saturday?
Szia
A ''2 sor bemenet'' azt igy lehet pl:
sed -ne '1,2p'
azaz konkrétabban:
A kukk fajl tartalma:
#!/bin/bash
sed -ne '1,2p'
Elindítani így kell:
cat input.txt |./kukk
vagy akár:
./kukk < input.txt
''A két figurát egy helyre nem lehet tenni'':
Ezt a legegyszerűbb akkor, amikor teszed a sakktáblára a figurákat.
Csak vizsgáld, hogy üres-e azon a helyen a tábla.
''Hiányzik vmelyik király:''
Mindkét sorban kell lennie K betűnek. Írassuk ki a sorokat, amiben nincs K betű. Ha van ilyen sor, HIBA:
sed -ne '1,2p'|grep -q -v 'K'
if [ ''$?'' == ''0'' ];then
echo HIBA
exit
fi;
köszi mindet
ma beszéltem egy évfolyamtársammal ( most mondta, hogy készen van velük ) és kérdezgettem, hogyan lenne érdemes
bemenet: két read, így a többit nem veszi figyelembe
ellenőrzés: sok if és grep egyszerű módon
pl a bástya ellenőrzésénél:
greppel kiszedni a 3 betűs kifejezések első betűjét ( jelen esetben B vagy b, mert bástya ) és azt megnézni, hogy 2nél több-e, ha igen, akkor hiba
ezek alapján nagyjából meg tudom csinálni ( azaz nagyon remélem )
What else you gonna do on a Saturday?
Sziasztok,
Van egy problémám amit nem tudok megoldani remélem tudtok segíteni van egy fileom aminek az elejéről 3 sort és a végéről 1-et le kéne vágnom, amint a példa is mutatja a sorok között bináris adat van. Megtudom ezt csinálni shell scripttel?
Sajnos a head -n-1 nincs imlplementálva a célhardver linuxában. head -n implementálva. tail -n tail -n+1 implementálva. sed, awk is van. Meg elvileg minden, eddig csak a head-nél vettem észre a hibát. Tudnátok segíten hogy oldhatnám meg?
pl: állomány
-----------------------------7d62af20c052c
Content-Disposition: form-data; name=''test''; filename=''C:\test.dat''
Content-Type: application/octet-stream
ELF Đ
-----------------------------7d62af20c052c
Köszi,
Seaky
Azt nem tudom mit csinál a bináris adattal, de ez a sed script elvileg azt csinálja amit akarsz:
4 { x; d; }
5~1 { x; p; }
MOD: huppsz, csak 2 sort dobott el az elején
[Szerkesztve]
Jester
bemenet: két read, így a többit nem veszi figyelembe
Aham. És egy soros bemenet, az lehet?
pl a bástya ellenőrzésénél:
greppel kiszedni a 3 betűs kifejezések első betűjét ( jelen esetben B vagy b, mert bástya ) és azt megnézni, hogy 2nél több-e, ha igen, akkor hiba
Inkább tr-rel kitörölni mindent, ami nem B, majd wc-vel megszámolni a karaktereket.
(#170) loszerafin válasza loszerafin (#169) üzenetére
Vagy:
Mindent kitörölni, ami nem sakkbábú-betű, betűnként újsorba tenni (=>minden sorban egyetlen betű lesz, azaz annyi sor, ahány bábú), sort-olni, uniq -c -vel megszámolhatod egyszerre, miből hány van.
Ezzel csak azt akarom mondani, hogy mindenre 1000+1 megoldás van.
A probléma az hogy a bináris rész bármekkora lehet ez akkor is működik?
Tehát a végéről nem kéne mondjuk x sor és az elejéről az első y sor. Közte bármennyi adat lehet.
Vagy irjak inkább C ben egy kis programot?
Nagyon köszi a segítséget!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Fogalmam sincs, miért nem próbálod ki?
Jester
munpack, metamail nincs?
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Én átkonvertálnám egy olyan filera, hogy egy bábu, egy sor, egy sorban a bábu neve, mezőszeparátor, pozíció, majd sorbarendezném első mező szerint, megszámolnám, hány bábu van, sorba rendezném második mező szerint, megszámolnám, hány olyan mező van, ami egynél többször szerepel.
Az átalakítás kb. ennyi:
sed -e 's/ //g' -e 's/,/\n/g' allas.txt|sed -e 's/[a-h][1-8]$/|&/'
a többit még szöszölöm a manualból, ha még érdekes
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Én meg a #148-ban mutatott kóddal (persze az ütközést is ellenőrizve) betölteném egy tömbbe, és onnan az egész triviális.
Jester
Tehát az, hogy egy mezőn ne álljon két figura, az ennyi:
sed -e 's/ //g' -e 's/,/\n/g' allas.txt|sed -e 's/[a-h][1-8]$/|&/' |sort -t\| -k 2 |uniq -t\| -f1 -c|sed -e 's/^[ ]*//'|grep -v ^1
Amit kiír, azon sorokban levő mezőkön több figura áll.
A uniq és a count célszerű használatával a másik részfeladat is egyszerűen megoldható, ennek bizonyítását az olvasóra bízzuk
Szerk: most olvasom végig, kicsit lefutott már ez a thread, sorry
[Szerkesztve]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Köszönöm a segítséget kipróbáltam
de ezt csinálta
bash-3.1$ sed '4{x;d};5~1{x;p}' < test.dat
11111
22222
33333
44444
44444
55555
55555
66666
66666
77777
77777
88888
88888
bash-3.1$
input file ez volt:
bash-3.1$ cat test.dat
11111
22222
33333
44444
55555
66666
77777
88888
99999
bash-3.1$
Köszönöm,
seaky
-n kapcsolóval kell futtatni a sed-et, különben magától kiírja az összes sort.
Igazából az a kimenet ami duplán van, vagyis a 4-8 sorok, és ha jól értem pont ez kell.
Jester
Hi! egy kis segítséget szeretnék kérni, a következő feladatot kaptam (mint beadandót) és még csak neki sem tudok álni, pedig ettől főgg a gyakjegyem .
Írjon szűrőt, ami vagy a paraméterként kapott fájlt vagy a standard inputot dolgozza fel.
Az input egy sakkjáték állás, két sorban. (Az input többi sorával - ha van - nem kell foglalkozni.) Az első sorban a világos figurákat, a másodikban a sötéteket soroljuk fel. Egy figurát 2 vagy 3 jel ad meg. Ebből két jel a figura helye (a1-h8), egy ezeket megelőző jel a figura betűje (B/F/H/V/K, mindig nagybetű), ami elmarad, ha ''gyalog'' a figura. A felsorolást helyköz és/vagy vessző tagolja, a tagoló jelek tetszőleges sorozata is szerepelhet egyetlen elválasztó jel helyett.
Ellenőrizni kell, hogy az input az előző pontbeli szabályoknak megfelel-e. Ha nem, azt hibaként kell kezelni. Az is hiba, ha két figurát ugyanarra a helyre kellene tenni, vagy hiányzik valamelyik király, vagy valamelyik figurából több van, mint a játék kezdetén. (Elvileg lehetne több B/H/F/V a ''gyalogátváltozás'' miatt, de ezt nem engedi meg a feladat.)
Ha nem hibás az input, akkor az állást a standard outputra kell írni, 8x8-as jelmátrix formában, úgy, hogy a világos figurákat a megfelelő nagybetű, a sötéteket a megfelelő kisbetű, az üres világos mezőket helyköz, az üres sötéteket pedig ''*'' jelzi.
Pl. input az alattuk levő eredményt adja:
Kc6 d6 Bc7 g7
Ba4 b6 Kg8
* * *k*
* B * G
gKG * *
* * * *
b* * * *
* * * *
* * * *
* * * *
Jó mi? Remélem Ti tudtok segíteni! Nagyon halás lennék érte! Rajtam ki fogot a feladat rendesen! Ha megoldást nem is tudtok de egy kétt tipet vagy tanácsot adjatok lécci! Nagyon fontos lenne! Előre is köszi
De ha tudtok megoldást az is jöhet
Azért ez, na ez már vmi.
Ha jól emlékszem, már 1 hónapja ezt a feladatot csináljuk. Olvass vissza, kérlek.
Hu ténleg! Bocsi meg köszi! Istenek vagytok!
Ismét kérdésem volna:
tmb=1
matrix[0]=1
cat ''$1'' | while read
do
for k in $REPLY
do
matrix[tmb]=$k
#echo $k
let tmb=tmb+1
done
echo ${matrix[1]}
echo ${matrix[2]}
done
echo ${matrix[1]}
A belső ciklusban kiírja a matrix tartalmát megfelelően, de hogy lehet olyan változót csinálni, ami a ciklusokon kívűl is láttszik? Tehát, mint a done után is megtartja az értékét?
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
Az átirányítás miatt a ciklusod másik shellben fog futni.
Helyette a legegyszerûbb egy for k in `cat ''$1''` lehet, ha az egyéb feltételeknek ez megfelel (pl. nem lesz túl nagy a fájl).
Jester
Ez remek! Közben rátaláltam googlin, hogy itt újra kellene neki foglalni a memóriát és az exporot hazsnálni stb.. de ez így ahogy írtad működik.
Nagyon köszönöm!
Van 5leted, hogy a k elemet hogy számolom össze? tehát, hogy 1sorba hány adat került? tehát a, ha
for k in a b c d e f
akkor megtudjam, a cikluson kívül, hogy a k értéke 6
[Szerkesztve]
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
Azt hiszem hülyeséget kérdeztem ismét.. elteszem egy változóba, mert a k-ba a cat eredménye kerül.
basszus, vagy is a tmb ből meg is tudom.. na jo, most mar gondolkozom.
[Szerkesztve]
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
Én nem értek szinte egy szót sem . Nagyon kétségbe vagyok esve, az meg ugye durva kérés lenne hogy ha arra kérnélek titeket hogy valaki küldje el vagy írja ide a megoldást vagy amire eddig jutottatok??? Nagyon nem akarok megbukni. Segítsetek léccccci.
[Szerkesztve]
Még korlátozott tudástárammal ennyire jutottam, elviekben ez jól megoldja az adott feladatot. 2 dimenziós tömböt nem tudom, hogy lehet itt csinálni.. ezért 1el csináltam. Sok minden nem elegáns benne, de még nem ismerem, hogy lehet függvényeket csinálni változókat átadni stb. Azt olvastam, hogy van, C-shell is.. de gondolom a bash ből csak hívni lehet.
A script maga feltételezi, hogy a egyenlő dimenzióju mártixok az adat forrás, ha nem, akkor hibás az eredmény akkor uzi és kilép.
tmb=0
for k in `cat ''$1''`
do
matrix[tmb]=$k
let tmb=tmb+1
done
echo ''elem: ''$tmb
sor=`grep ''^[0-9]'' ''$1'' | wc -l`
let dim=$tmb/$sor
if [ $dim != $sor ]; then
echo Nem megfelelo matrix
exit 1
fi
echo ''sor: ''$sor
b=0
oszell=0
sorell=0
for((i=0;i<$sor;i++));do
let sorok=${matrix[i+b]}+${matrix[i+b+1]}+${matrix[i+b+2]}+${matrix[i+b+3]}
#echo ''sor'' $((i+1)) $sorok
let b=b+3
let oszp=${matrix}+${matrix[i+4]}+${matrix[i+8]}+${matrix[i+12]}
#echo ''oszlop''$((i+1)) $oszp
if [ $i -gt 0 ]; then
if [ $sorell != $sorok ]; then
echo ''hibas a $((i+1)) sor''
else
sorell=$sorok
fi
if [ $oszell != $oszp ]; then
echo ''hibas a $((i+1)) oszlop''
else
oszell=$oszp
fi
else
sorell=$sorok
oszell=$oszp
fi
done
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
Köszönön szépen a segítséget! Nagyon hálás vagyok!
Köszönöm!
Helló!
Sürgősen kérném segítségeteket. Standart input első 2 sorát kellene beolvasni és azután megkeresni xyk karaktert, xz koordinátákat tartalmaz ahova a k karaktert kell kiírni standart outputra.
Semmit se konyítok a linxhoz de nagyon kellene a script. Légyszi segítsetek.
Van ez a bash script részletem:
for ((i=1;i<=8;i++)); do
if ( [[ ''$i'' -eq ''1'' ]] || [[ ''$i'' -eq ''3'' ]] || [[ ''$i'' -eq ''5'' ]] || [[ ''$i'' -eq ''7'' ]] );
then
feltolt_szokoz;
else
feltolt_csillag;
fi;
done
Ha a feltolt_* elé rakok echot, akkor azt kiírja, de látszólag, mindig a feltolt_szokoz hívódik meg.
Mindkettő egy többdimenziós tömb $i-edik sorát tölti fel, ha kell, postolom azokat is.
Más kérdés, nem teljesen illik ide, de felteszem: hogy lehet egyik sima perjelből backslasht csinálni? a sed s///\/ nem megy, eddig ezzel próbálkoztam, illetve különféle escapelt verzióival.
Nekem kiválóan mûködik.
Ugyanakkor:
* A vagy operátort egy feltételen belül is használhatod:
if [[ ''$i'' -eq ''1'' || ''$i'' -eq ''3'' || ''$i'' -eq ''5'' || ''$i'' -eq ''7'' ]]
* Az eq az numerikus összehasonlítás, a számok köré felesleges az idézõjel.
* Az egészre sokkal egyszerûbb a párosságot vizsgálni:
if [[ $((i % 2)) -eq 1 ]]
then
feltolt_szokoz
else
feltolt_csillag
fi
* vagy vizsgálat nélkül:
for ((i=1; i<=7; i+=1))
do
feltolt_szokoz
i=$((i + 1))
feltolt_csillag
done
Jester
> echo ''foo/bar'' | sed 's/\//\\/g'
foo\bar
Részletesen:
s: parancs
/: paraméter elválasztó
\/: védett per karakter
/: paraméter elválasztó
\\: védett backslash karakter
/: paraméter elválasztó
g: parancs módosító
Amúgy sima karaktercserére a tr parancs való, vagy a bash beépített operátora:
> t=''foo/bar''
> echo ${t//\//\\}
foo\bar
Jester
Üdv!
grep ''.xy'' file -ból megtalálja a kívánt karakterláncot, meg lehetne oldani, hogy ezt a jelen esetben 3 karaktert kivágjam és beletegyem egy változóba/ fájlba?
Vagy ha nem megoldtható akkor esetleg más ötlet. A feledat annyi, hogy adot az xy és kell a .-tal jelölt karakter
Készen vagyok a feladatokkal, amelyek most már hibátlanul működnek.
Ezúton szeretném megköszönni az összes kedves fórumtársnak, főleg Jester01-nek és loszerafinnak a segítségét!
További jó shell script írást mindenkinek
What else you gonna do on a Saturday?
Mondjuk soronként beolvasod a fájlt, majd a ${valtozo#minta} használatával megkeresed az összes elõfordulást.
Jester
A sed nem várja el, hogy a regexpben / legyen a paraméter elválasztó, hanem az az elválasztó, amit először megtalál az s betű után.
Tehát ha /-t akarsz csereberélni, akkor hasznosabb lehet más elválasztót találni, mint pl. a vessző
sed -e 's,/,\\,g'
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis