ubuntuusers.de

Script um Wörter zu filtern

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

LinuxMong761

Anmeldungsdatum:
11. Juni 2018

Beiträge: Zähle...

Hallo zusammen,

Ich suche hier Hilfe für meine kommende Klassenarbeit über Shell Scripting.

Ich habe bei einigen Übungsaufgaben Schwierigkeiten und hoffe jemand kann mir hier helfen.

Aufgabe: Man soll ein Skript schreiben, dass gewisse Wörter filtert. Bsp.: ./filter Ich mache gerne Öl auf meinen Salat

Nun sollen wir das "Salat" filtern, so dass nur "Ich mache gerne Öl auf meinen" ausgegeben wird.

Ich suche seit heute morgen verzweifelt und finde keine passende Lösung.

PS. Version weiss ich nicht

Danke im voraus. LinuxMong761

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Schau dir mal sed, grep und cut an, wenn du eine entsprechende Shell verwendest. Die solltest du zumindest mit angeben, wenn schon nicht das System 😉

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

@LinuxMong761: Soll der Text aus dem gefiltert werden soll tatsächlich als Argumente übergeben werden‽ Und falls ja als einzelne Argumente oder soll das ein Argument sein, das entsprechend vor dem „word splitting“ der Shell geschützt werden muss?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13212

Und was hast Du bisher versucht?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

Das geht ganz leicht mit AWK:

1
2
3
4
5
6
7
8
#/bin/sh
awk 'BEGIN {
    for (i = 1; i < ARGC; i++)
        if (ARGV[i] != "Salat") {
            printf "%s ", ARGV[i]
        }
    }' "$@"
echo

😈

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11263

Wohnort: München

Wenn jegliches Vorkommen von "Salat" aus den Argumenten getilgt werden soll (also z.B. auch das Salat aus Salatschüssel), geht das in der Bash bequemer:

1
2
#!/bin/bash                                                                     
echo "${@/Salat}"

Oder wenn man einzelne Wörter aus Argumenten (egal ob sie selbst aus mehreren mit Whitespace getrennten Worten bestehen) filtern will:

1
2
3
#!/bin/bash
printf '%s\0' ${@} | grep -zv "^Salat$" | paste -szd " " -;
echo

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

@seahawk1986: Dass das bequemer geht weiss ich, das war ja gerade der Punkt keine Musterlösung frei Haus zu liefern…

Antworten |