Eu tenho o seguinte em um arquivo
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.
'''
com várias outras coisas neste arquivo.
Extrato essa parte no meu script de shell via sed -n "/'''/,/'''/p" $1
(onde $1
está o arquivo).
Isso me dá uma variável com o conteúdo como um 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. '''
Como posso agora extrair a parte entre o '''
?
Ou existe ainda uma maneira melhor de recuperá-lo do arquivo de múltiplas linhas?
Estou no Mac El Captain 10.11.2 e GNU bash, versão 3.2.57 (1) -release (x86_64-apple-darwin15)
shell-script
text-processing
Emerson Cod
fonte
fonte
Respostas:
extrairia (e imprimiria seguido por uma nova linha) a parte entre cada par de '' '.
Cuidado que
perl
retira o arquivo inteiro da memória antes de iniciar o processamento, para que a solução não seja apropriada para arquivos muito grandes.fonte
Tente isto, se você tiver
gawk
ou estivermawk
à sua disposição:Isso pressupõe que não há outros
'''
-s no arquivo.Explicação: Define o separador de registros para três aspas simples e é impresso se o número do registro for par.
Infelizmente, ele não funcionará com todas as
awk
implementações, pois os Separadores de Registros com vários caracteres não fazem partePOSIX awk
.fonte
Não é tão bom quanto a resposta awk, mas como você estava usando originalmente o sed
Ou mais curto, como apontado por Glenn Jackman nos comentários (ligeiramente alterado)
Correr como
Resultado
fonte
sed -n "/'''/,//{//!p}"
- provavelmente terá que fazerset +H
primeiro no bash para desativar a expansão do histórico.