Ich habe eine Datei mit Muster
<span class="WebRupee">Rs.</span>\n29\n<br/><font style="font-size:smaller;font-weight:normal">\n3 days\n</font></td>, <td class="pricecell"><span class="WebRupee">Rs.</span>\n59\n<br/><font style="font-size:smaller;font-weight:normal">\n7 days\n</font></td>, <td class="pricecell"><span class="WebRupee">Rs.</span>\n99\n<br/><font style="font-size:smaller;font-weight:normal">\n12 days\n</font></td>
Ich möchte die Werte 29, 3 Tage, 59 usw.
im Grunde der Wert zwischen \n value \n
Ich habe viele Orte konsultiert, weiß aber nicht, wie ich den \ n Zeichen entkommen kann.
Ich habe versucht: - grep -o '\n.*\n' o.txt
Aber es hat nicht funktioniert
bash
shell-script
grep
quoting
Penta
quelle
quelle
... but I think that's just as wrongheaded as demanding every trivial HTML processing task be handled by a full-blown parsing engine.
. Es ist kein Verbrechen, einen regulären Ausdruck zu verwenden, um Text aus einer Datei zu erhalten. Ich habe so viele Leute predigen hören, dass Sie es nicht tun sollten, aber es ist absolut nichts Falsches daran, es in kleinem Maßstab zu tun, wenn Sie wissen, was Sie tun.Antworten:
Grep interpretiert
\n
als Zeilenumbruch. Es sieht so aus, als ob Ihre Datei keine Zeilenumbrüche enthält,\
gefolgt vonn
. Um nach wörtlichen Backslashes zu suchen, müssen Sie diese verdoppeln:Mit GNU grep kann die Ausgabe einfach bereinigt werden, um Folgendes zu entfernen
\n
:Hier
(?<=\\n)
ist eine Rückblick-Behauptung und(?=\\n)
eine Vorausschau-Behauptung, die erfordert, dass der Text, mit dem wir übereinstimmen, von umgeben ist\n
. Während grep nicht überlappende Übereinstimmungen zurückgibt, besteht eine Subtilität darin, dass die Look-Behinds und Look-Aheads nicht für das Match berücksichtigt werden . Dies lässt uns mit dem Problem zurück, dass der Text, den wir nicht wollen, auch von umgeben ist\n
. In o.txt sind die Zeichen\n<br/><font style="font-size:smaller;font-weight:normal">\n
beispielsweise von umgeben\n
. Um diese Zeichenfolgen zu entfernen, muss der übereinstimmende Text nicht nur,\
sondern auch<
und ausschließen>
.Wenn wir kein GNU-Grep haben,
sed
können Sie auch die Ausgabe bereinigen:Eine andere Option ist die Verwendung von awk:
Hier verwendet awk
\
gefolgt vonn
als Datensatztrennzeichen und wir drucken nur die geradzahligen Datensätze.quelle
[^\\<>]*
im 2. grep-Ausdruck bedeutet?