2013-06-19 14 views
5

Mam więc plik z tekstem:Korzystanie z polecenia grep i cut delimiter (w skrypcie powłoki bash UNIX) - i rodzaj "cofania" go?

puddle2_1557936:/home/rogers.williams/folderz/puddle2 

chcę użyć polecenia grep

grep puddle2_1557936 

mieszane z poleceniem cut (lub innego polecenia, jeżeli potrzeba), aby wyświetlić tylko tę część :

/home/rogers.williams/folderz/puddle2 

tej pory wiem, że jeśli to zrobić

grep puddle2_1557936 | cut -d ":" -f1 

następnie wyświetli

puddle2_1557936 

Tak jest zresztą do rodzaju „odwrotność” polecenia ogranicznik cięcia?

UWAGA: Rozwiązanie musi zacząć od grep puddle2_15579636.

+4

Minimalna poprawka to użycie '-f2' z' cut'. Btw, dlaczego musi zaczynać się od 'grep puddle2_15579636', czy coś złego się stanie, jeśli tak nie będzie? – doubleDown

+0

Dziękuję bardzo! Nie wiedziałem, że naprawa była łatwa ... haha. Musiałem także zacząć od grepa puddle2_15579636, ponieważ piszę dość długi scenariusz, a w tym momencie w skrypcie jedyne dostępne informacje to! Trudno to wytłumaczyć, jeśli nie zobaczysz całego projektu! – DeaIss

Odpowiedz

19

Nie trzeba zmieniać ogranicznika, aby wyświetlić prawą część napisu za pomocą cut.

-f przełącznik dowodzenia w cut jest pierwiastkiem n-TH oddzielone przez separator: :, więc może po prostu wpisać:

grep puddle2_1557936 | cut -d ":" -f2 

Another rozwiązań (dostosować ją nieco), jeśli chcą zabawa:

Korzystanie :

grep -oP 'puddle2_1557936:\K.*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                   
/home/rogers.williams/folderz/puddle2 

lub jeszcze z look around

grep -oP '(?<=puddle2_1557936:).*' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'                  
/home/rogers.williams/folderz/puddle2 

lub :

perl -lne '/puddle2_1557936:(.*)/ and print $1' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2'              
/home/rogers.williams/folderz/puddle2 

lub za pomocą (dzięki glenn jackman)

ruby -F: -ane '/puddle2_1557936/ and puts $F[1]' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2 

lub z :

awk -F'puddle2_1557936:' '{print $2}' <<< 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2 

lub :

python -c 'import sys; print(sys.argv[1].split("puddle2_1557936:")[1])' 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2 

lub za pomocą tylko :

IFS=: read _ a <<< "puddle2_1557936:/home/rogers.williams/folderz/puddle2" 
echo "$a" 
/home/rogers.williams/folderz/puddle2 

lub za pomocą w :

js<<EOF 
var x = 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
print(x.substr(x.indexOf(":")+1)) 
EOF 
/home/rogers.williams/folderz/puddle2 

lub za pomocą w :

php -r 'preg_match("/puddle2_1557936:(.*)/", $argv[1], $m); echo "$m[1]\n";' 'puddle2_1557936:/home/rogers.williams/folderz/puddle2' 
/home/rogers.williams/folderz/puddle2 
+1

Gdzie jest 'python' i' ruby' ?? +1 –

+0

: p Dzięki! Potrzebny tylko do basha, ale dodatkowe informacje nie zaszkodzą haha ​​ – DeaIss

+0

Dodano bash one;) –

Powiązane problemy