Ich arbeite derzeit an der Erstellung einer Datenbank in bash. Ich möchte eine "und" -Funktion hinzufügen. Diese Funktion sucht nach zwei Dingen und gibt nur Dinge zurück, die mit beiden Suchen übereinstimmen. Wie würde ich das erreichen?Grep mehrere Dinge außerhalb der Reihenfolge
Hier ist mein Code:
#!/bin/bash
clear
#return all
function all {
cat people.dat
}
#return some
function search {
grep -i "$SEARCH" people.dat || echo "search returned nothing"
}
#or search
function or {
egrep -i "$search1|$search2" people.dat
}
#and search
function and {
if [[ $(grep -i "$search1") = $(grep -i "$search2") ]]; then
echo yes
#that is temporary I want to see if it worked
fi
}
#return null
function null {
return
}
while [ true ]
do
#get the search
read SEARCH
#search
if [[ $SEARCH == *" OR "* ]]; then
search1=${SEARCH%" OR "*}
search2=${SEARCH##*" OR "}
or
elif [[ $SEARCH == *" AND "* ]]; then
search1=${SEARCH%" AND "*}
search2=${SEARCH##*" AND "}
and
elif [ "$SEARCH" = "all" }; then
all
elif [ "$SEARCH" = "exit" ]; then
exit
elif [ "$SEARCH" = "" ]; then
null
else
search
fi
done
Ist das Hausaufgaben behandeln? Ich hoffe wirklich, dass Sie keine Produktionsdatenbank in Bash implementieren wollen ... – l0b0
Sie können sed wie folgt verwenden: 'sed -n"/$ a/{/ $ b/p} "' für AND und 'sed - n "/ $ a \ | $ b/p" 'für OR – andlrc
Können sich die Suchzeichenfolgen überschneiden? Beispiel: 'search1 =" a b "' 'search2 =" bc "' string = "a b c". Hier wird 'grep" $ {search1}. * $ {Search2} "<<<" $ {string} "' fehlschlagen. –