2010-03-24 4 views
8

Я пишу скрипт bash, который должен преобразовать строку в нижний регистр. Проблема в том, что я делаю это на mac, поэтому «tr» недоступен. Как я могу это сделать на Mac?в верхнем регистре в нижнем регистре в bash на mac

Проблема, которую я пытаюсь решить, заключается в том, что мой скрипт должен распознать, если расширение является .gif или .jpg, - и я не хочу проверять на .jpeg, .jPeg. JPEG, JPEG, и т.д. и т.д. и т.п ... если есть более разумный способ сделать это, чем просто преобразование в нижний регистр и тестирование на GIF, JPG и JPEG, я все уши :)

UPDATE:
I я идиот.
Причина этого макинтош «не имеет» эти основные программы текстового преобразования, потому что я переписал PATH с «привет», делая некоторые испытания> _ <

+2

Какая версия sion Mac вы используете? 10.6, конечно, имеет 'tr'. – kennytm

+0

10.5.8 ________ – Mala

ответ

10

в Баш, вы можете использовать nocaseglob

shopt -s nocaseglob 
for file in *.jpg *.jpeg *.gif 
do 
    echo "$file" 
done 
#turn off 
shopt -u nocaseglob 

вообще преобразовать случаи, различные способы

echo "stRING" | awk '{print toupper($0)}' 

echo "STRING" | tr "[A-Z]" "[a-z]" # upper to lower 

echo "StrinNG" | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' #lower to upper 
+0

Какие побочные эффекты будут иметь это? будет ли он просто делать баш-матч нечувствительным к регистру, пока я не выключу его? – Mala

+0

О, мне также нужно получить расширение в нижнем регистре, поскольку я пишу его обратно ... это сделает это для меня? – Mala

+0

ah nevermind, я собираюсь с этим и вложенными для циклов: для расширения в gif jpg jpeg, для файла в *. $ Extension, [...] done done; Спасибо! – Mala

2

в Баш вы можете использовать капитализировать:

echo "HelLo! how ArE you?" | capitalize -u 

echo "HelLo! how ArE you?" | capitalize -l 

echo "HelLo! how ArE you?" | capitalize -c 
+3

На mac, я получаю «capizeize: command not found». – ben3000

+0

Даже для тех, кто мог бы иметь это, было бы полезно, если бы вы добавили вывод каждой из этих трех команд. –

4

это встроено в Баш:

конвертировать $ у в верхний регистр:

y="this Is A test" 
echo "${y^^}" 

и конвертировать $ у в нижнем регистре:

y="THIS IS a TeSt" 
echo "${y,,}" 
+5

Не работает над моей установкой Yosemite ..... Была ли «плохая замена» Любая идея? – MisterJ

+1

@MisterJ Я еще не обновился до Yosemite, но я подозреваю, что он использует версию, аналогичную версии, доступной с Mavericks, которая равна 3.2.x (~ 8 лет). К сожалению, эти операторы модификации case были введены в Bash 4. Я предлагаю использовать ['' 'brew install bash'''] (http://brew.sh/), чтобы получить современную версию. – Exide

+2

@ Exide yes Я подтверждаю, что версия bash yosemite устарела, у меня были другие подобные проблемы. Решили их, используя другие методы (например, старый добрый tr для этого). – MisterJ

Смежные вопросы