Мені потрібно вміти замінити пробіл ( ) на крапку ( .) в рядку в 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 рази більше, ніж удвічі довше струни).