
zBase=$(basename "{query}")
title=${zBase%.*}
echo -n $title;
Приведенная выше команда копирует имя файла в буфер обмена (используя Alfred: часть {query} взята из Alfred). Теперь я хочу скопировать только первое слово имени файла. Как мне его изменить?
Вот пример имени файла:
Джон 2015 Структура существительного и глагола.pdf
Вышеуказанная рекомендация дает мне [Джон 2015 Структура существительного и глагола] в моем буфере обмена. Теперь я хочу получить толькоДжонв моем буфере обмена.
решение1
title=$(echo $title | cut -d" " -f1)
Добавьте это перед echo. Это обрезает имя на каждом пробеле и берет первую часть -> То, что вы хотели сделать
решение2
Вместо использования внешних инструментов, таких как sed
, cut
или awk
, вы можете просто использовать встроенное расширение переменной оболочки, которое вы уже использовали для удаления расширения:
echo -n ${title%% *}
Использование double %%
означает удаление самого длинного совпадения, то есть удаление всего содержимого переменной, начиная с первого пробела.
решение3
Ну вот,
title=$(echo $zBase|awk {'print $1'})
В awk $1 выдает первое слово, $2 — второе слово и т. д.
решение4
Вы всегда можете положиться на любой инструмент обработки текста, который выполнит эту работу. Например sed
:
$ sed -r 's/^([[:alpha:]]*).*/\1/' <<< "John 2015 Noun and verb structure.pdf"
John