J'ai ce qui suit dans un fichier
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.
'''
avec plusieurs autres choses dans ce fichier.
J'extrais cette partie dans mon script shell via sed -n "/'''/,/'''/p" $1
(où $1
est le fichier).
Cela me donne une variable avec le contenu comme une doublure
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. '''
Comment puis-je maintenant extraire la pièce entre le '''
?
Ou existe-t-il encore un meilleur moyen de le récupérer à partir du fichier multiligne?
Je suis sur Mac El Captain 10.11.2 et GNU bash, version 3.2.57 (1) -release (x86_64-apple-darwin15)
shell-script
text-processing
Emerson Cod
la source
la source
Réponses:
extraira (et imprimera suivi d'une nouvelle ligne) la partie entre chaque paire de '' '.
Attention,
perl
la totalité du fichier est stockée en mémoire avant de commencer à le traiter afin que la solution ne soit pas appropriée pour les fichiers très volumineux.la source
Essayez ceci, si vous en avez
gawk
oumawk
à votre disposition:Cela suppose qu'il n'y a pas d'autre
'''
-s dans le fichier.Explication: Il définit le séparateur d'enregistrement sur trois guillemets simples et s'imprime si le numéro d'enregistrement est pair.
Malheureusement, cela ne fonctionnera pas avec toutes les
awk
implémentations, car les séparateurs d'enregistrement à plusieurs caractères ne font pas partie dePOSIX awk
.la source
Pas aussi agréable que la réponse awk mais comme vous utilisiez à l'origine sed
Ou plus court comme l'a souligné Glenn Jackman dans les commentaires (légèrement modifié)
Courir comme
Production
la source
sed -n "/'''/,//{//!p}"
- probablement faire d'set +H
abord en bash pour désactiver l'expansion de l'histoire.