bash: захватить поля 5 и 7 из пути Unix? - PullRequest
2 голосов
/ 24 сентября 2010

Приведенные пути:что-то вроде этого до сих пор, но я ищу что-то более элегантное, и без необходимости захватывать «мусор»:

cd /data/mirrors/third-party/centos/5/project/x86_64
echo `pwd` | tr '/' ' ' | while read junk1 junk2 junk3 junk4 version junk5 arch; do
    echo version=$version arch=$arch
done
version=5 arch=x86_64

Ответы [ 4 ]

2 голосов
/ 24 сентября 2010

Это работает для меня:

pwd | awk -F'/' '{print "version=" $6 " arch=" $8}'
1 голос
/ 25 сентября 2010

Вы можете использовать IFS и массив для разделения каталога на его компоненты:

#!/bin/bash
saveIFS=$IFS
IFS='/'
dirs=($(pwd))
IFS=$saveIFS
version=${dirs[5]}
arch=${dirs[7]}
1 голос
/ 25 сентября 2010
> p=$(pwd)
> echo $p
/data/mirrors/third-party/centos/5/projectA/x86_64

> basename ${p}
x86_64

> basename ${p%/*/*}
5

Вы также можете использовать что-то вроде:

echo `expr match "$p" '<regular-expression>'`

... возможно, кто-то может помочь мне с этим регулярным выражением;)

0 голосов
/ 24 сентября 2010

попробуйте

echo `pwd` | cut -d'/' -f6,8 | tr '/' ' '

для отображения поля

или для отображения с версией sring и аркой

echo `pwd` | cut -d'/' -f6,8 | sed -e 's/\(.*\)\/\(.*\)/version=\1 arch=\2/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...