Gaming: Asus 3080 Ti + 5900X
Proxmox: Intel NUC,i7-8559U + i5-8259U 32GB Ram
Rojter: UCG-Ultra, WAN 1000/1000
Bash, grep och pipe
Hej!
Jag håller på med en kurs i Datorteknik och just nu en uppgift i Bash.
Jag kör Raspbian på en Rasppbery Pi 3. Och kör terminalen från Windows dator med PuTTY.
Uppgiften är:
Gör ett script som skapar en fil som innehåller en förteckning av vissa filer från din hemmakatalog som bygger på ett urval.
Urvalet kan antigen vara filer som har en viss filändelse eller som är skapade senast eller tidigast ett visst datum.
Här ska du jobba med "pipes" och "grep".
Jag lyckades göra ett körbart script i tidigare uppgift där man bara skulle lista innehållet i hemmappen, kopiera, döpa om och flytta till ny mapp.
Kort:
ls -l > alla_filer
mkdir nymapp
cp alla_filer nymapp/lista
Jag tänkte nu att man kunde göra såhär:
ls -l | grep *.txt >textdokument
För att få filen textdokument där alla filer med filändelsen .txt listas. Men jag får bara ett tomt textdokument.
Men gör jag såhär: utan *
ls -l | grep txt >textdokument
Listas både mappar och filer som någonstans innehåller "txt".
Jag vill alltså bara lista filerna med filändelsen .txt
Finns enklare sätt men måste använda mig av grep och pipe.
Tacksam för hjälp!
Tar gärna emot tips på det andra alternativet också där man gör på samma sätt fast endast listar filer skapade senast eller tidigast ett visst datum.
Blir mycket text här nu men vill tillägga att jag har googlat och letat men hittar bara hur man gör utan grep och pipe.
man grep i terminalen alt http://www.gnu.org/software/grep/manual/grep.html
Kika på hur regular expression fungerar. T.ex ls | grep -E 'MyPattern'
-E anger extended regular expression. Extended är något jag trivs bättre med att jobba med - men ni kanske inte får använda det?
Så borde du rätt snabbt klura ut hur du ska få enbart .txt filer eller vilken ändelse du nu vill plocka fram.
Argumentet till grep är ett regex — ett reguljärt uttryck. *.txt tolkas som "noll eller flera gånger, följt av vilket tecken som helst en gång, följt av sekvensen 'txt'". Det misslyckas i och med att uttrycket börjar med en kvantifiering utan någon antydan om vad som förväntas komma noll eller flera gånger.
grep \\.txt$ gör det du vill: grepa efter rader där sekvensen .txt, följt av slut av rad ($) förekommer. Dollartecknet gör att vi inte råkar ta med saker som .txt.zip, och \ behövs för att få grep att tolka punkt som ett punkttecken snarare än ett godtyckligt tecken.
För att bash inte ska tolka \ som en escape character använder vi dubbla bakåtslash (escape escape). Vi kan även innesluta argumentet till grep i single-quotes för samma ändamål: '\.txt$'
Kom-pa-TI-bilitet
man grep i terminalen alt http://www.gnu.org/software/grep/manual/grep.html
Kika på hur regular expression fungerar. T.ex ls | grep -E 'MyPattern'
-E anger extended regular expression. Extended är något jag trivs bättre med att jobba med - men ni kanske inte får använda det?
Så borde du rätt snabbt klura ut hur du ska få enbart .txt filer eller vilken ändelse du nu vill plocka fram.
Argumentet till grep är ett regex — ett reguljärt uttryck. *.txt tolkas som "noll eller flera gånger, följt av vilket tecken som helst en gång, följt av sekvensen 'txt'". Det misslyckas i och med att uttrycket börjar med en kvantifiering utan någon antydan om vad som förväntas komma noll eller flera gånger.
grep \\.txt$ gör det du vill: grepa efter rader där sekvensen .txt, följt av slut av rad ($) förekommer. Dollartecknet gör att vi inte råkar ta med saker som .txt.zip, och \ behövs för att få grep att tolka punkt som ett punkttecken snarare än ett godtyckligt tecken.
För att bash inte ska tolka \ som en escape character använder vi dubbla bakåtslash (escape escape). Vi kan även innesluta argumentet till grep i single-quotes för samma ändamål: '\.txt$'
Stort tack för snabbt svar!
Nu har jag löst uppgiften och börjar förstå hur grep ska användas
- Idag AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna? 9
- Idag Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz 13
- Igår Meta öppnar upp Quests OS – vill bli VR-världens Android 12
- Igår Googles nästa Chromecast får dubblerad lagring 74
- Igår EK Water Blocks lovar bot och bättring 16
- Systembolaget varnar: Dryckesbrist efter hackerattack55
- Tråden för 2-kanals stereo med högtalare642
- Snabbtest: Bli mer Pro med mindre tangentbord41
- Kan inte ansluta "smart-plug" till ny Telia router Technicolor EWA 13309
- Ny TV har skada i panel, butik menar att de inte kan återskapa felet21
- Gamingskärm - ultrawide eller inte?19
- Microsoft blockerar äldre processorer i Windows 11 24H236
- Vattenkylning from beyond the grave! (Socket 771)29
- Letar begagnad smidig bärbar dator på 14"2
- Switch som ser ut som ett vanligt vägguttag, typ.11
- Säljes 64 Gig DDR5 2x32Gig, 6000MT/s CL36-38-38 1.35V EXPO/XMP
- Säljes Gamingdator I9-13900KF - 7800 XT - Z690 - DDR5 32GB - Define 7
- Säljes T700 2TB M2 SSD. Lian Li Strimer 24pin. Vertical mount
- Säljes Dell Poweredge R330
- Bytes 3070 MSI Suprim X mot Strix
- Säljes Sapphire pulse 6700xt
- Säljes XPS 9370
- Säljes Gigabyte GeForce RTX 4080 16GB GAMING OC
- Säljes Gamingtillbehör - HyperX, Logitech
- Säljes Samsung Galaxy Z Fold 3 512GB 5G
- Viaplay sätter ner foten mot delade konton29
- AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna?9
- Systembolaget varnar: Dryckesbrist efter hackerattack55
- Veckans fråga: Hur mycket lagringsutrymme har din dator?81
- Valve täpper till kryphål i Steam-återbetalningar18
- Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz13
- Google skjuter på utfasning av tredjepartskakor till 202516
- Skadlig kod sprids via lömska Github-länkar13
- Microsoft blockerar äldre processorer i Windows 11 24H236
- Meta öppnar upp Quests OS – vill bli VR-världens Android12