Ich habe folgendes in einer Datei
description: '''
This rule forbids throwing string literals or interpolations. While
JavaScript (and CoffeeScript by extension) allow any expression to
be thrown, it is best to only throw <a
href="https://developer.mozilla.org
/en/JavaScript/Reference/Global_Objects/Error"> Error</a> objects,
because they contain valuable debugging information like the stack
trace. Because of JavaScript's dynamic nature, CoffeeLint cannot
ensure you are always throwing instances of <tt>Error</tt>. It will
only catch the simple but real case of throwing literal strings.
<pre>
<code># CoffeeLint will catch this:
throw "i made a boo boo"
# ... but not this:
throw getSomeString()
</code>
</pre>
This rule is enabled by default.
'''
mit mehreren anderen Dingen in dieser Datei.
Ich extrahiere diesen Teil in meinem Shell-Skript über sed -n "/'''/,/'''/p" $1
(wo $1
ist die Datei).
Dies gibt mir eine Variable mit dem Inhalt als ein Liner
description: ''' This rule forbids throwing string literals or interpolations. While JavaScript (and CoffeeScript by extension) allow any expression to be thrown, it is best to only throw <a href="https://developer.mozilla.org /en/JavaScript/Reference/Global_Objects/Error"> Error</a> objects, because they contain valuable debugging information like the stack trace. Because of JavaScript's dynamic nature, CoffeeLint cannot ensure you are always throwing instances of <tt>Error</tt>. It will only catch the simple but real case of throwing literal strings. <pre> <code># CoffeeLint will catch this: throw "i made a boo boo" # ... but not this: throw getSomeString() </code> </pre> This rule is enabled by default. '''
Wie kann ich jetzt den Teil zwischen dem extrahieren '''
?
Oder gibt es noch eine bessere Möglichkeit, es aus der mehrzeiligen Datei abzurufen?
Ich bin auf Mac El Captain 10.11.2 und GNU Bash, Version 3.2.57 (1) -Veröffentlichung (x86_64-apple-darwin15)
shell-script
text-processing
Emerson Cod
quelle
quelle
Antworten:
würde den Teil zwischen jedem Paar von '' 'extrahieren (und drucken, gefolgt von einer neuen Zeile).
perl
Beachten Sie, dass die gesamte Datei im Speicher verschluckt wird, bevor Sie mit der Verarbeitung beginnen, sodass die Lösung möglicherweise nicht für sehr große Dateien geeignet ist.quelle
Versuchen Sie dies, wenn Sie
gawk
odermawk
zu Ihrer Verfügung haben:Dies setzt voraus, dass
'''
die Datei keine anderen -s enthält.Erläuterung: Das Datensatztrennzeichen wird auf drei einfache Anführungszeichen gesetzt und gedruckt, wenn die Datensatznummer gerade ist.
Leider funktioniert es nicht bei allen
awk
Implementierungen, da Datensatztrennzeichen mit mehreren Zeichen nicht Teil von sindPOSIX awk
.quelle
Nicht so schön wie die Antwort von awk, aber wie Sie ursprünglich sed verwendet haben
Oder kürzer, wie von Glenn Jackman in den Kommentaren hervorgehoben (leicht geändert)
Rennen wie
Ausgabe
quelle
sed -n "/'''/,//{//!p}"
- wahrscheinlich müssen Sieset +H
zuerst in Bash tun , um die Erweiterung der Geschichte auszuschalten.