Мне нужно иметь возможность сделать, это заменить пробел ( ) с точкой (
.
) в строке в Bash.
Я думаю, это было бы довольно просто, но я новичок, поэтому не могу понять, как изменить подобный пример для этого использования.
Используйте встроенную замену строки оболочки. Пример:
foo=" "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
См. Http://tldp.org/LDP/abs/html/string-manipulation.html для получения дополнительной информации.
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 раза больше длины в два раза).tr
! ... В зависимости от доступной памяти и ресурсов hw ... Но вы правы !: В зависимости от вида работы, выделенные инструменты остаются более эффективными!$'\n'
Вы можете использовать
tr
, как это:Пример:
От
man tr
:источник
В bash вы можете выполнить замену шаблона в строке с помощью
${VARIABLE//PATTERN/REPLACEMENT}
конструкции. Используйте только/
и не//
заменять только первое вхождение. Шаблон является шаблоном подстановки, как глобусы файлов.источник
Попробуй это
источник
Используйте подстановку параметров:
источник
Попробуйте это для путей:
Он заменяет пространство внутри строки в двойных кавычках на
+
пение, затем заменяет+
знак обратной косой чертой, а затем удаляет / заменяет двойные кавычки.Я должен был использовать это, чтобы заменить пробелы в одном из моих путей в Cygwin.
источник
sed
. Цитаты не имеют значения.