Tengo lo siguiente en un archivo
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.
'''
con varias otras cosas en este archivo.
Extraigo esta parte en mi script de shell a través de sed -n "/'''/,/'''/p" $1
(donde $1
está el archivo).
Esto me da una variable con el contenido como un revestimiento
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. '''
¿Cómo puedo extraer ahora la parte entre '''
?
¿O hay incluso una mejor manera de recuperarlo del archivo multilínea?
Estoy en Mac El Captain 10.11.2 y GNU bash, versión 3.2.57 (1) -release (x86_64-apple-darwin15)
shell-script
text-processing
Bacalao Emerson
fuente
fuente
Respuestas:
extraería (e imprimiría seguido de una nueva línea) la parte entre cada par de '' '.
Tenga cuidado porque
perl
absorbe todo el archivo en la memoria antes de comenzar a procesarlo, de modo que la solución puede no ser apropiada para archivos muy grandes.fuente
Prueba esto, si tienes
gawk
omawk
a tu disposición:Esto supone que no hay otros
'''
-s en el archivo.Explicación: establece el separador de registros en tres comillas simples e imprime si el número de registro es par.
Desafortunadamente, no funcionará con todas las
awk
implementaciones, ya que los separadores de registros de varios caracteres no son parte dePOSIX awk
.fuente
No es tan bueno como la respuesta awk pero como estabas usando originalmente sed
O más corto como lo señaló Glenn Jackman en los comentarios (ligeramente cambiado)
Correr como
Salida
fuente
sed -n "/'''/,//{//!p}"
, probablemente tenga que hacerloset +H
primero en bash para desactivar la expansión del historial.