My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# ----------------------------------------------------------------------------
# Troca uma palavra por outra, nos arquivos especificados.
# Obs.: Além de palavras, é possível usar expressões regulares.
# Uso: zztrocapalavra antiga nova arquivo(s)
# Ex.: zztrocapalavra excessão exceção *.txt
#
# Autor: Aurelio Marinho Jargas, www.aurelio.net
# Desde: 2000-05-04
# Licença: GPL
# ----------------------------------------------------------------------------
# TODO -r (ver zzarrumanome)
zztrocapalavra ()
{
zzzz -h trocapalavra "$1" && return

local arquivo antiga_escapada nova_escapada
local antiga="$1"
local nova="$2"

# Precisa do temporário pois nem todos os Sed possuem a opção -i
local tmp="$ZZTMP.trocapalavra.$$"

# Verificação dos parâmetros
[ "$3" ] || { zztool uso trocapalavra; return 1; }

# Escapando a barra "/" dentro dos textos de pesquisa
antiga_escapada=$(echo "$antiga" | sed 's,/,\\/,g')
nova_escapada=$( echo "$nova" | sed 's,/,\\/,g')

shift; shift

# Para cada arquivo que o usuário informou...
for arquivo
do
# O arquivo existe?
zztool arquivo_legivel "$arquivo" || continue

# Um teste rápido para saber se o arquivo tem a palavra antiga,
# evitando gravar o temporário desnecessariamente
grep "$antiga" "$arquivo" >/dev/null 2>&1 || continue

# Uma seqüência encadeada de comandos para garantir que está OK
cp "$arquivo" "$tmp" &&
sed "s/$antiga_escapada/$nova_escapada/g" "$tmp" > "$arquivo" && {
echo "Feito $arquivo" # Está retornando 1 :/
continue
}

# Em caso de erro, recupera o conteúdo original
echo
echo "Ops, deu algum erro no arquivo $arquivo"
echo "Uma cópia dele está em $tmp"
cat "$tmp" > "$arquivo"
return 1
done
rm -f "$tmp"
}

Change log

r710 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: $1 colocado entre aspas na
chamada padrão zzzz -h de todas as
funções.
Go to: 
Sign in to write a code review

Older revisions

r669 by aureliojargas on Mar 28, 2012   Diff
lint: removendo espaços inúteis. Parte
2.
r655 by aureliojargas on Mar 23, 2012   Diff
s/Aurélio/Aurelio/ *
r524 by aureliojargas on May 23, 2011   Diff
COMBO: Agora todas as chamadas ao
zztool uso por falha na verificação
dos parâmetros possuem um return 1
depois. Assim outros scripts que usam
as funções podem detectar erros.
All revisions of this file

File info

Size: 1751 bytes, 57 lines
Powered by Google Project Hosting