Sziasztok! Abban szeretném kérni a segítségeteket, hogy adott pár tucat szöveges, file, aminek egy bizonyos sorát egy bizonyos minta alapján szeretném megváltoztatni, majd elmenteni őket új néven. pl. file1.txt és file2.txt ... is tartalmazza a "sarga" szót, amit mindenhol szeretnék "kek"-re változtatni új filenevekkel, amik pl. SargaFie1.txt és SargaFile2.txt stb... lesznek. Aztan majd "zold"-re is és így tovább. Szeretném nem egyesével, szóval elsősorban parancssoros megoldások érdekelnek! Előre is köszönöm ha tudtok segíteni! Sajna lövésem sincs, merre keresgéljek. Üdv: Pali És a MEGOLDÁS: ls piros_*.ly > ls_piros.txt awk 'BEGIN { FS = "_" } ; {print "sed -e 's/piros/kek/g' " $0" > kek_"$2 }' ls_piros.txt >Piros2Kek.sh utána csak futtatni kell e Piros2Kek.sh file-t és bingó Köszönöm mégegyszer a sok segítséget! Pali
Szöveges fájlok egyetlen sorának változtatása parancssorban [Megoldva]
Shell scriptet írnék rá, amit nem tudok fejből, nyálaznom kellene a referencia használatiát rendesen hogy eltaláljam a helyes szintaxist. De az alap logika szerintem (aztán majd kijavítanak): 1) beolvasod a fájlt, minden sorát egy array változóba küldöd 2) regex keresést futtatsz a sorokon, ha van találat, akkor azt a sort lecseréled 3) vissza alakítod az array-t stringre, beírod az új fájlba
Kezdenék legózni a sed-del. pl.: sed -e 's/sarga/kek/g' file1.txt >file1kek.txt
kltHát ez nagyon tuti, egy sor. Már csak meg kell etetni egy halom txtvel és annyi. Jut eszembe valahol azt olvastam nincs olyan feladat amire az AWK ne lenne jó... Ez most már 3 külön út ugyan arra a feladatra.
bartasziliJa, ilyen a Lego :) find *.txt | while read -r nev; do sed -e 's/sarga/kek/g' $nev > $nev.kek.txt; done Aztán még ezt is lehet kalapálni, hogy tényleg jó legyen.
pnem"Sajnos, a while-t nem értem, " Eredetile find -exec {} izébizé alapján próbáltam összehebrákolni, de nem ment a második behelyettesítés. Ezért ciklust rettyintettem, hogy értsd: find *.txt megkeresi a szöveges fájljaidat. a | jel a find kimenetét becsatornázza a másik program bemenetére, ami a ciklus.. while read -r nev; Amíg van mit olvasni a bemenetről, beolvassa a "nev" változóba. Lehetne akármi a neve, én nev-nek neveztem. Innentől $nev a hivatkozás, és az helyettesíti az aktuális fájlnevet, amin dolgozol. do után jön a teendő: do sed -e 's/sarga/kek/g' $nev > $nev.kek.txt; Tehát, ha a nev=Fajl1.txt, akkor a parancs valóságos kinézete: sed -e 's/sarga/kek/g' File1.txt > File1.txt.kek.txt done pedig lezárja a ciklust. Lehet, hogy valami ilyesmire van szükséged: find *.txt | while read -r nev; do sed -e 's/sarga/kek/g' $nev > ${nev//Sarga/Kek}; done (Ezt most még nem próbáltam ki, csak okoskodás...)