Я выполняю приблизительно три различных дистрибутива Linux - два на работе, и один дома.
На работе я выполняю Redhat и OpenSuSE. Мне нравится OpenSuSE немного лучше между двумя, потому что это, кажется, имеет более актуальные пакеты (хотя бесплатная версия Redhat - Fedora - может отличаться).
Дома я запускаю Linux Mint, который является вариантом Ubuntu. Причина я выбрал Mint, состоит в том, потому что все кодеки там прямо из поля, так сказать. Мне нравится он лучше, чем OpenSuSE, потому что Монетный двор намного быстрее, чтобы установить и обновить между двумя. Я также как то, как Монетный двор имеет все программное обеспечение, в котором Вы нуждаетесь в Центре программного обеспечения, включая Chrome, Opera, Skype. В OpenSuSE необходимо найти эти сторонние программы - не огромное соглашение, но хорошо иметь большую часть программного обеспечения, управляемого в одном месте.
Другим большим выбором является Ваша настольная среда. Я не знаю ничего из Единицы Ubuntu, я просто знаком с Gnome и KDE. После выполнения KDE в течение 5 лет я переключился на Gnome. KDE кажется немного более роскошным и является более новейшим, но это, кажется, менее стабильно. Gnome не кажется как симпатичный, но все работает.
Это может быть решено через чистый синтаксис оболочки. Это действительно требует временной переменной из-за круглых скобок (скобки) хотя:
#!/bin/bash
LATLNG="(53.3096,-6.28396)"
tmp=${LATLNG//[()]/}
LAT=${tmp%,*}
LNG=${tmp#*,}
С другой стороны, можно сделать это сразу путем проигрывания с IFS
и использование read
встроенный:
#!/bin/bash
LATLNG="(53.3096,-6.28396)"
IFS='( ,)' read _ LAT LNG _ <<<"$LATLNG"
Ответ SiegeX лучше для этого конкретного случая, но необходимо также знать, как передать произвольный текст sed
.
sed
ожидает имена файлов как его секунду, третью, и т.д. параметры, и если это не находит имен файлов, это читает из своего стандартного входа. Таким образом, если у Вас есть текст, который Вы хотите обработать, это не находится в файле, необходимо передать его по каналу к sed
. Самый простой путь - это:
echo "blah blah" | sed 's/blah/blam/g'
Таким образом, Ваш пример стал бы:
LAT=$(echo "$LATLNG" | sed 's/(\(.*\),\(.*\))/\1/g')
LON=$(echo "$LATLNG" | sed 's/(\(.*\),\(.*\))/\2/g')
Если Вы думаете, что существует любой шанс это $LATLNG
мог начаться с тире, или если Вы хотите быть педантичными, необходимо использовать printf
вместо echo
:
printf '%s' "$LATLNG" | sed 's/foo/bar/g'
Или "здесь документ", но это может быть немного неловким с конструкцией, которую Вы используете:
LAT=$(sed 's/foo/bar/g' <<END
$LATLNG
END
)
Или если Вы используете bash
и не взволнованные по поводу мобильности, можно использовать "здесь строка":
sed 's/foo/bar/g' <<< "$LATLNG"
Вот решение, которое будет работать в любой оболочке POSIX:
parse_coordinates () {
IFS='(), ' # Use these characters as word separators
set -f # Disable globbing
set $1 # Split $1 into separate words
set +f # Restore shell state
unset IFS
LAT=$2 # $1 is the empty word before the open parenthesis
LON=$3
}
parse_coordinates "$LATLNG"
Вот другое одинаково портативное решение, которое анализирует определенный используемый синтаксис.
LAT=${LATLNG%\)} # strip final parenthesis
LAT=${LAT#\(} # strip initial parenthesis
LON=${LAT##*[, ]} # set LON to everything after the last comma or space
LAT=${LAT%%[, ]*} # set LAT to everything before the first comma or space
#!/bin/bash
– SiegeX 30.01.2011, 06:51