Quando executo este comando no Ubuntu 12.10, recebo o seguinte:
$ dir=$(gsettings get org.gnome.desktop.background picture-uri)
$ echo $dir
'file:///usr/share/backgrounds/warty-final-ubuntu.png'
Gostaria apenas de limpar o valor armazenado em $dir
da seguinte forma:
$ dir="${dir/file:\/\//}"
$ echo $dir
'/usr/share/backgrounds/warty-final-ubuntu.png'
Isso truncará o file://
do início da string. Você pode mudar isso se estiver recebendo algo diferente. No seu caso:
$ dir="${dir/\/\//}"
Detalhes
O texto acima está usando uma substituição de padrão, ${var/pattern/}
, que removerá pattern
da variável $var
.
Alternativas
@jthill também teve uma boa sugestão de usar a notação "remover o prefixo de padrão de correspondência correspondente" do Bash. É um pouco mais difícil de entender, IMO, mas funciona igualmente bem.
Exemplo
$ dir="\'${dir#\'file://}"
O texto acima está removendo o prefixo \'file://
de $dir
. Ele está substituindo por um tick, '
, seguido pelo restante de $dir
sem o 'file://
.
Página man do Bash
Se você quiser ler mais sobre esses recursos do Bash, eu o encorajo a fazer isso. Esses são recursos que estamos usando acima.
trechos da página man do Bash
${parameter#word}
${parameter##word}
Remove matching prefix pattern. The word is expanded to produce a
pattern just as in pathname expansion. If the pattern matches the
beginning of the value of parameter, then the result of the
expansion is the expanded value of parameter with the shortest
matching pattern (the ''#'' case) or the longest matching pattern
(the ''##'' case) deleted. If parameter is @ or *, the pattern
removal operation is applied to each positional parameter in turn,
and the expansion is the resultant list. If parameter is an array
variable subscripted with @ or *, the pattern removal operation is
applied to each member of the array in turn, and the expansion is the
resultant list.
${parameter/pattern/string}
Pattern substitution. The pattern is expanded to produce a pattern
just as in pathname expansion. Parameter is expanded and the longest
match of pattern against its value is replaced with string. If
pattern begins with /, all matches of pattern are replaced with
string. Normally only the first match is replaced. If pattern
begins with #, it must match at the beginning of the expanded value
of parameter. If pattern begins with %, it must match at the end of
the expanded value of parameter. If string is null, matches of
pattern are deleted and the / following pattern may be omitted.
If parameter is @ or *, the substitution operation is applied to each
positional parameter in turn, and the expansion is the resultant
list. If parameter is an array variable subscripted with @ or *, the
substitution operation is applied to each member of the array in
turn, and the expansion is the resultant list.
Pergunta de acompanhamento no 1
O OP perguntou o seguinte nos comentários abaixo.
now i am having the following problem.. unable to open image '/home/thamara/.config/variety/Downloaded/wallbase_type_all_order_random_nsfw_100_board_1/wallpaper-2249773.jpg''
O problema, se você perceber, é que há duas marcas no final da string. Eu não tenho idéia de por que eles estão lá, mas se você quiser se livrar das marcas de marcação à direita, você pode usar este comando sed
logo após a substituição anterior que eu dei a você. Eu não consegui descobrir uma maneira de lidar com as duas marcas simples no final, apenas usando os recursos de substituição do Bash.
dir=$(echo "$dir" | sed "s/''/'/")
Exemplo
$ echo "$dir"
'/home/thamara/.config/variety/Downloaded/wallbase_type_all_order_random_nsfw_100_board_1/wallpaper-2249773.jpg''
$ dir=$(echo "$dir" | sed "s/''/'/")
$ echo "$dir"
'/home/thamara/.config/variety/Downloaded/wallbase_type_all_order_random_nsfw_100_board_1/wallpaper-2249773.jpg'