Мне нужно иметь возможность сделать, это заменить пробел ( ) с точкой ( .) в строке в Bash.
Я думаю, это было бы довольно просто, но я новичок, поэтому не могу понять, как изменить подобный пример для этого использования.
Мне нужно иметь возможность сделать, это заменить пробел ( ) с точкой ( .) в строке в Bash.
Я думаю, это было бы довольно просто, но я новичок, поэтому не могу понять, как изменить подобный пример для этого использования.
Ответы:
Используйте встроенную замену строки оболочки. Пример:
foo=" "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
См. Http://tldp.org/LDP/abs/html/string-manipulation.html для получения дополнительной информации.
tr! ... В зависимости от доступной памяти и ресурсов hw ... Но вы правы !: В зависимости от вида работы, выделенные инструменты остаются более эффективными!
$'\n'
Вы можете использовать tr, как это:
tr " " .
Пример:
# echo "hello world" | tr " " .
hello.world
От man tr:
ОПИСАНИЕ
Преобразование, сжатие и / или удаление символов из стандартного ввода, запись в стандартный вывод.
В bash вы можете выполнить замену шаблона в строке с помощью ${VARIABLE//PATTERN/REPLACEMENT}конструкции. Используйте только /и не //заменять только первое вхождение. Шаблон является шаблоном подстановки, как глобусы файлов.
string='foo bar qux'
one="${string/ /.}" # sets one to 'foo.bar qux'
all="${string// /.}" # sets all to 'foo.bar.qux'
Попробуй это
echo "hello world" | sed 's/ /./g'
Используйте подстановку параметров:
string=${string// /.}
Попробуйте это для путей:
echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'
Он заменяет пространство внутри строки в двойных кавычках на +пение, затем заменяет +знак обратной косой чертой, а затем удаляет / заменяет двойные кавычки.
Я должен был использовать это, чтобы заменить пробелы в одном из моих путей в Cygwin.
echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'
sed. Цитаты не имеют значения.
trдлинные строки. В моей системеtrвыигрывает у bash, начиная со строк, содержащих больше1000символов. Похоже, сложность времени bash хуже, чем линейная. Небольшой тест:x="$(tr -dc 'a-z \n' </dev/urandom | head -c1M)"; time y="$(tr ' ' \\- <<< "$x")"; time z="${x// /-}". С длиной строки 1M (= 2 ^ 20)trвзял0.04sи bash 5.0.11 взял17s. С 2Mtrвзял0.07s(ожидалось), но bash взял69s(в 4 раза больше длины в два раза).