Я не знаю, какую оболочку Вы используете, но возможности tr
не встроенное. Это уверено не для меня в ударе или zsh :) Попытайтесь работать type tr
лично убеждаться.
Во всей вероятности, sed
правильный инструмент для задания. Это - то, для чего это было сделано.По обстоятельствам perl
и awk
также.
Если у Вас есть очень простые случаи и если Вы работаете со строковой переменной вместо конвейера, Вам могло бы сойти с рук реальное встроенное такое как использование поиска строки удара и замены на переменной.
string="Stuf with <tag> in it."
escaped=${string//</<}
escaped=${escaped//>/>}
echo $escaped
В ударе я рекомендую type -p
which
. which
внешняя команда, и это время от времени хитро. Можно использовать sed
удалить все после финала /
, или используйте специального назначения dirname
утилита.
cd "$(dirname -- "$(type -p program)")"
cd "$(type -p program | sed 's:[^/]*$::')"
На командной строке, если Вы знаете, что каталог не содержит специальных символов (пробел или \[?*
), можно опустить кавычки. Можно также использовать одинарные левые кавычки вместо одного из $(…)
(вложенные одинарные левые кавычки являются трудными, не стоят того здесь).
cd `dirname $(type -p program)`
cd $(dirname `type -p program`)
cd `type -p program | sed 's:[^/]*$::'`
В zsh существует более компактный синтаксис.
cd ${$(whence -p program):h}
cd ${$(echo =program):h}
cd ${${_+=program}:h}
(Да, тот последний является загадочным. Это использует ${VAR+TEXT}
синтаксис на _
переменная, со значением тем, чтобы быть =program
который эквивалентен $(whence -p program)
.)
$()
вместо обратных галочек:cd $(dirname $(which program))
– glenn jackman 01.12.2011, 23:49$()
из-за многих преимуществ$()
по обратным галочкам. – jw013 26.12.2011, 19:57