У моего ноутбука очень (очень) подобные системные требования. Тот же жесткий диск, то же RAM и почти тот же процессор, и он очень хорошо работает с Ubuntu. Похоже, что этот ноутбук будет отлично работать с Ubuntu 14.04, как и мой.
Вы можете сделать
string="|abcdefg|"
string2=${string#"|"}
string2=${string2%"|"}
echo $string2
Или, если длина строки постоянна, вы можете сделать
string="|abcdefg|"
string2=${string:1:7}
echo $string2
Кроме того, это должно работать
echo "|abcdefg|" | cut -d "|" -f 2
Также этот
echo "|abcdefg|" | sed 's/^|\(.*\)|$/\1/'
Вот решение, которое не зависит от длины строки (bash):
string="|abcdefg|"
echo "${string:1:${#string}-2}"
Отключение нескольких сообщений, перечисленных здесь, кажется, самый простой способ сделать это:
string="|abcdefg|"
echo ${string:1:-1}
edit: работает на ubuntu с bash 4.2; не работает на centOS с bash 4.1
И еще один:
string="|abcdefg|"
echo "${string//|/}"
Другой способ с головкой & amp; tail:
$ echo -n "|abcdefg|" | tail -c +2 | head -c -1
abcdefg
Вы также можете использовать sed для удаления | не только ссылаясь на сам символ, но и используя позиционные ссылки, как в:
$ echo "|abcdefg|" | sed 's:^.\(.*\).$:\1:'
abcdefg
Где ':' - разделители (вы можете заменить их / или любого символа, не содержащегося в запросе, любой знак, следующий за s сделаем это) Здесь ^ (карет) означает в начале входной строки и $ (доллар) означает в конце. . (point), что после каретки и той, что она есть до того, как знак доллара представляет собой один символ. Иными словами, мы удаляем первый и последний символы. Имейте в виду, что это удалит любые символы, даже если | его нет в строке.
EX:
$ echo "abcdefg" | sed 's:^.\(.*\).$:\1:'
bcdef
Немного более подробный подход, но работает над любым видом первого и последнего символов, не обязательно должен быть одним и тем же. Основная идея заключается в том, что мы берем переменную, читаем ее по символу и добавляем только те, которые мы хотим к новой переменной
. Вот что вся идея отформатирована в приятную функцию
crop_string_ends() {
STR="$1"
NEWSTR=""
COUNT=0
while read -n 1 CHAR
do
COUNT=$(($COUNT+1))
if [ $COUNT -eq 1 ] || [ $COUNT -eq ${#STR} ]
then
continue
fi
NEWSTR="$NEWSTR"$CHAR
done <<<"$STR"
echo $NEWSTR
}
И вот та же самая функция в действии:
$> crop_string_ends "|abcdefg|"
abcdefg
$> crop_string_ends "HelloWorld"
elloWorl
>>> mystring="|abcdefg|"
>>> print(mystring[1:-1])
abcdefg
или в командной строке:
$ python -c 'import sys;print sys.stdin.read()[1:-2]' <<< "|abcdefg|"
abcdefg
$ echo "|abcdefg|" | awk '{print substr($0,2,length($0)-2)}'
abcdefg
$ ruby -ne 'print $_.split("|")[1]' <<< "|abcdefg|"
abcdefg
Малое и универсальное решение:
expr "|abcdef|" : '.\(.*\).'
Специально в этом случае и разрешая, что '|' символ может быть там или нет:
expr "|abcdef" : '|*\([^|]*\)|*'