Мені потрібно вміти замінити пробіл ( ) на крапку (
.
) в рядку в 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'
Використовувати заміну параметрів:
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
перевершує баш, починаючи з рядків, що мають більше1000
символів. Схоже, складність у часі Баша гірша, ніж лінійна. Невеликий тест:x="$(tr -dc 'a-z \n' </dev/urandom | head -c1M)"; time y="$(tr ' ' \\- <<< "$x")"; time z="${x// /-}"
. З довжиною струни 1М (= 2 ^ 20)tr
взяв0.04s
і баш 5,0,11 взяв17s
. З 2Mtr
взяли0.07s
(очікувалося), але беш брали69s
(4 рази більше, ніж удвічі довше струни).