EXCLUSÃO DE RESPONSABILIDADE:
Esta solução removerá todos os espaços em branco "extras" nas linhas substituídas. Por exemplo ...:
describe 'Apple Banana'
... será substituído por:
describe 'apple Banana'
No entanto, os espaços em branco "extras" em ...:
context "GET BANANA"
... não será removido.
Aqui está um exemplo em awk
conforme solicitado (observe que você pode executar o comando em uma linha. As quebras de linha são apenas para apelo visual aqui no Superusuário):
cat someTextFile.txt | awk '{ \
if( \
($1=="describe" || $1=="it" || $1=="context") \
&& (substr($2,0,1)=="\"" || substr($2,0,1)=="'"'"'") \
&& !(substr($2,2,length($2)-1)=="POST" \
|| substr($2,2,length($2)-1)=="GET" \
|| substr($2,2,length($2)-1)=="PUT" \
|| substr($2,2,length($2)-1)=="DELETE") \
){ \
subStr=substr($2,0,1); \
subStr2=tolower(substr($2,2,1)); \
restStr=substr($2,3,length($2)-1); \
print $1" "subStr""subStr2""restStr" "$3 \
}else{ \
print \
} \
}'
OUTPUT :
describe 'apple banana'
describe 'aPPLE BANANA'
describe 'apple Banana'
describe "apple Banana"
describe 'one TWO'
context 'POST BANANA'
context 'xPOST BANANA'
EDIT: aqui está o comando sem as quebras de linha cat someTextFile.txt | awk '{ if( ($1=="describe" || $1=="it" || $1=="context") && (substr($2,0,1)=="\"" || substr($2,0,1)=="'"'"'") && !(substr($2,2,length($2)-1)=="POST" || substr($2,2,length($2)-1)=="GET" || substr($2,2,length($2)-1)=="PUT" || substr($2,2,length($2)-1)=="DELETE") ){ subStr=substr($2,0,1); subStr2=tolower(substr($2,2,1)); restStr=substr($2,3,length($2)-1); print $1" "subStr""subStr2""restStr" "$3}else{print}}'
Se você deseja gravar a saída em um novo arquivo, basta adicionar > output.txt
no final do comando.
Se você deseja executar isso em vários arquivos e armazenar o resultado em um arquivo de texto, simplesmente troque cat someFile.txt
por um comando cat
que é executado nos arquivos que você deseja que sejam formatados. com cat *log*
ou cat $(find /some/path -name "*log*")
EDIT EDIT: Muito obrigado Scott pelo feedback!