У меня есть имя файла в формате, как:Как вы разбираете имя файла в bash?
system-source-yyyymmdd.dat
Я хотел бы быть в состоянии разобрать различные биты файла с помощью «-» как разделитель.
У меня есть имя файла в формате, как:Как вы разбираете имя файла в bash?
system-source-yyyymmdd.dat
Я хотел бы быть в состоянии разобрать различные биты файла с помощью «-» как разделитель.
Вы можете использовать cut command, чтобы получить в каждой из 3-х «полей», например:
$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2
source
«-d» указывает разделитель, «-f» указывает номер поля, которое требуется
Используйте команду cut
.
например.
echo "system-source-yyyymmdd.dat" | cut -f1 -d'-'
извлечет первый бит.
Измените значение параметра -f
, чтобы получить соответствующие детали.
Вот руководство по команде Cut.
В зависимости от ваших потребностей, awk более гибкий, чем разрез. Первый тизер:
# echo "system-source-yyyymmdd.dat" \
|awk -F- '{printf "System: %s\nSource: %s\nYear: %s\nMonth: %s\nDay: %s\n",
$1,$2,substr($3,1,4),substr($3,5,2),substr($3,7,2)}'
System: system
Source: source
Year: yyyy
Month: mm
Day: dd
Проблема заключается в том, что описание AWK как «более гибким», конечно, как называя iPhone усовершенствованную сотовый телефон ;-)
Другой способ заключается в использовании встроенных средств синтаксического анализа оболочечных, который исключает затраты на создание дочерних процессов:
oIFS=$IFS IFS=- file="system-source-yyyymmdd.dat" set $file IFS=$oIFS echo "Source is $2"
приятный и элегантный (в моем уме :-), используя только встроенные модули, чтобы поместить его в массив
var='system-source-yyyymmdd.dat'
parts=(${var//-/ })
Затем вы можете найти детали в массиве ...
echo ${parts[0]} ==> system
echo ${parts[1]} ==> source
echo ${parts[2]} ==> yyyymmdd.dat
Оговорки: это не будет работать, если имя файл содержит «странные» символы, такие как пространство, или, небо запрещает, цитаты, обратные кавычки. ..
Мне любопытно, почему вы добавили # подсказку. Обычно это приглашение указывает на root или суперпользователя. В общем, я бы подумал, что такие вещи, как опробовать команду ** cut **, будут лучше выполняться как обычный пользователь. Я бы использовал приглашение $. – 2008-09-09 19:34:27