2008-09-08 23 views

Odpowiedz

29

Można użyć cut command dostać na każdym z pól „” 3, np:

$ echo "system-source-yyyymmdd.dat" | cut -d'-' -f2 
source 

„-d” określa separator, „-f” określa numer pola, które wymagają

+0

Jestem ciekawy, dlaczego dodałeś znak zachęty #. Zwykle ten znak wskazuje użytkownika root lub administratora. Ogólnie rzecz biorąc, myślę, że takie rzeczy jak wypróbowanie polecenia ** cut ** będą lepiej wykonywane jako zwykły użytkownik. Użyłbym $ prompt. –

+0

Och, tak - dobry punkt. Muszę przyznać, że byłam wtedy zalogowana jako root i po prostu poszłam na to - zły nawyk, wiem. Powiedziawszy to, myślę, że echo i cut są dwoma najmniej szkodliwymi poleceniami :) Ale ze względu na kompletność, z pewnością zaktualizuję ten przykład od razu. Twoje zdrowie. –

+0

Jak mogę przypisać wyjście do zmiennej? jeśli robię "var =" system-source-yyyymmdd.dat "| cut -d'- '-f2' nie działa. – EsseTi

7

Użyj polecenia cut.

np.

echo "system-source-yyyymmdd.dat" | cut -f1 -d'-' 

wyodrębni pierwszy bit.

Zmień wartość parametru -f, aby uzyskać odpowiednie części.

Oto instrukcja polecenia Cut.

8

W zależności od potrzeb, awk jest bardziej elastyczny niż cięcie. Pierwszy zwiastun:

# 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 

Problem jest to, że opisując awk jako „bardziej elastyczne” jest z pewnością jak wywołanie iPhone ulepszony telefon komórkowy ;-)

1

Inną metodą jest użycie narzędzia do analizowania wewnętrznych Shell, która unika koszt stworzenia procesów potomnych:

 
oIFS=$IFS 
IFS=- 
file="system-source-yyyymmdd.dat" 
set $file 
IFS=$oIFS 
echo "Source is $2" 
8

ładny i elegancki (w głowie :-) używając tylko Zabudowy jest umieszczenie go na tablicy

var='system-source-yyyymmdd.dat' 
parts=(${var//-/ }) 

Następnie można znaleźć części w tablicy ...

echo ${parts[0]} ==> system 
echo ${parts[1]} ==> source 
echo ${parts[2]} ==> yyyymmdd.dat 

Zastrzeżenie: to nie będzie działać, jeśli nazwa pliku zawiera „dziwne” znaki takie jak miejsca lub, niebo zabrania, cytaty, małe cudzysłowy. ..