Nehmen wir an, ich habe eine Variable
line="This is where we select from a table."
jetzt möchte ich mal gucken wie oft select im satz vorkommt.
grep -ci "select" $line
Ich habe es versucht, aber es hat nicht funktioniert. Ich habe es auch versucht
grep -ci "select" "$line"
Es funktioniert immer noch nicht. Ich erhalte den folgenden Fehler.
grep: This is where we select from a table.: No such file or directory
...<<<"$line"
. Der Befehlgrep
erwartet stattdessen eine DateiAntworten:
Habe
grep
auf seiner Standardeingabe gelesen. Los geht's mit einer Pfeife ...... oder eine hier Zeichenfolge ...
Sie können auch Leerzeichen durch Zeilenumbrüche ersetzen, bevor Sie mit dem Greifen beginnen:
... oder Sie könnten nur darum bitten
grep
, das Match auszudrucken:Auf diese Weise können Sie den Rest der Leitung loswerden, wenn eine Übereinstimmung vorliegt.
Edit: Ups, lies ein bisschen zu schnell, danke Marco . Um die Vorkommen zu zählen, leiten Sie einfach eines davon an
wc(1)
;)Eine weitere Änderung , die nach dem Kommentar von lzkata vorgenommen wurde und
$line
bei der Verwendung zitiert wirdecho
.quelle
wc
, um die Aufgabe abzuschließen:grep -o <string> <<< "$variable" | wc -l
echo "$line"
diese Option, um vorhandene Zeilenumbrüche beizubehalten, anstatt sie mittr
Sie müssen nicht nach
grep
so einer einfachen Sache rufen .Oder als Funktion:
Es dauert 2 oder 3 Argumente. Wenn Sie mehr als das bereitstellen, werden die Ergebnisse verzerrt. Sie können es wie folgt verwenden:
... der die Häufigkeit von
.
in...
ausgibt, wenn sie mindestens zweimal auftritt. So was:Wenn
$_occur
leer ist oderunset
wenn es aufgerufen wird, wirkt es sich überhaupt nicht auf Shell-Variablen aus undreturn
1, wenn"$2"
es"$1"
weniger als"$3"
einmal auftritt . Oder, wenn mit nur zwei Argumenten aufgerufen, wirdreturn
1 nur, wenn"$2"
nicht in ist"$1"
. Anderenfalls wird 0 zurückgegeben.In seiner einfachsten Form können Sie also Folgendes tun:
... was druckt ...
...aber...
... wird gedruckt ...
Man könnte es auch ein wenig anders schreiben und die Anführungszeichen weglassen um
$2
in der beide(*"$2"*)
und"${1#*"$2"}"
Aussage. Wenn Sie das tun, können Sie Shell-Globs für Matches wiesh[io]te
für den Match-Test verwenden.quelle
bash
unddash
/sh
(und wahrscheinlich auch in einigen anderen).