У меня есть имя файла в формате, например:
system-source-yyyymmdd.dat
Я хотел бы проанализировать различные биты имени файла, используя "-" в качестве разделителя.
У меня есть имя файла в формате, например:
system-source-yyyymmdd.dat
Я хотел бы проанализировать различные биты имени файла, используя "-" в качестве разделителя.
Вы можете использовать команду cut для получения каждого из 3-х полей, например:
$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2
source
"- d" указывает разделитель, "-f" указывает номер требуемого поля
В зависимости от ваших потребностей 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 с улучшенным сотовым телефоном; -)
Хороший и элегантный (на мой взгляд:-) использование только встроенных модулей - это поместить его в массив
var='system-source-yyyymmdd.dat'
parts=(${var//-/ })
Затем вы можете найти части в массиве...
echo ${parts[0]} ==> system
echo ${parts[1]} ==> source
echo ${parts[2]} ==> yyyymmdd.dat
Предостережение: это не будет работать, если имя файла содержит "странные" символы, такие как пробел, или, запрещает запрет, цитаты, обратные кавычки...
Используйте команду cut
.
например.
echo "system-source-yyyymmdd.dat" | cut -f1 -d'-'
будет извлекать первый бит.
Измените значение параметра -f
, чтобы получить соответствующие части.
Здесь приведено руководство по Cut.
Другим методом является использование внутренних инструментов разбора оболочки, что позволяет избежать затрат на создание дочерних процессов:
oIFS=$IFS IFS=- file="system-source-yyyymmdd.dat" set $file IFS=$oIFS echo "Source is $2"