LINUX.ORG.RU

[bash] Замена пробелов в строке

 


0

0

Признаюсь, bash практически не знаю, но надо отредактировать кусок скрипта.

В общем есть строка $filename и надо заменить все пробелы в данной строке на %20.

Насколько я понял, sed можно использовать только с файлами, и в данном случае он не подходит.

Скрипт генерирует ссылку на файл, закинутый в дропбокс, по известному ID и имени файла, передаваемому в качестве параметра и копирует её в буфер обмена.

Ответ на: комментарий от Reset

Так, привожу скрипт
cornholio@host-10-204-60-69:~$ cat dropbox.sh
#!/bin/sh

DPDIR=~/Dropbox/Public
ID=1880889

if [ -e "$1" ]
then
cp -f "$1" "$DPDIR"
file=`basename "$1"`
$file = `echo -n $file | sed "s/ /%20/"`
link="http://dl.getdropbox.com/u/$ID/$file"
notify-send -i go-down "Dropbox" "Ссылка на \"$file\" скопирована в буфер обмена"
echo "$link" | xsel -bi
else
notify-send -i go-down "Dropbox" "Выберите файл!"
fi

запуск отвечает:

cornholio@host-10-204-60-69:~$ ./dropbox.sh Dropbox/Dropbox/Public/07\ -\ F.D.K.\ \(-Fearless\ Doctor\ Kill\).mp3
./dropbox.sh: line 10: 07: команда не найдена

GreatCornholio
() автор топика
Ответ на: комментарий от dGhost

>что это?
Правда, что это?)

>к седу нужно добавить g

спасибо

Но где я оплошал больше всего:
file= `echo -n $file | sed 's/ /%20/g'`
вместо
file=`echo -n $file | sed 's/ /%20/g'`

Поправил, работает. всем спасибо.

GreatCornholio
() автор топика
Ответ на: комментарий от GreatCornholio

> file=`echo -n $file | sed 's/ /%20/g'`

$file без кавычек -- это значит множество сюрпризов, в частности двойной пробел станет одинарным.

echo -n : во первых это не общепринятая опция, во вторых она здесь redundant.

file=`echo "$file" | sed 's/ /%20/g'`

dilmah ★★★★★
()
Ответ на: комментарий от GreatCornholio

-file=`basename "$1"`
-$file = `echo -n $file | sed "s/ /%20/"`
+file=`basename "$1" | sed "s/ /%20/g"`

предыдущему оратору:
tr не годится в принципе.
tr = символ -> символ
а надо "символ -> строка"

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.