2012-02-07 13 views
15

Mam niektóre dane wyjściowe z niektórych poleceń powłoki Bash. Dane wyjściowe są rozdzielane wiersz po wierszu za pomocą "\ n" lub "\ 0". Chciałbym wiedzieć, że istnieje sposób na wyprowadzenie wyjścia do Perla i przetworzenie linii danych po linii w Perlu (tak jak wyprowadzanie wyjścia do awk, ale w moim przypadku jest to kontekst Perla.). Przypuszczam, że komenda może być coś takiego:Jak wyprowadzić linię wyjściową wiersza polecenia Bash Shell po linii do Perla w celu przetworzenia Regex?

Bash Shell command | perl -e 'some perl commands' | another Bash Shell command 

Przypuśćmy, że chcesz zastąpić wszystkie „:” znak znak „@” w „linia po linii” podstawa (nie globalne podstawienie, mogę użyć warunek, np. nieparzysty lub parzysty, w celu ustalenia, czy bieżąca linia powinna mieć substytucję, czy nie.), jak mógłbym to osiągnąć.

Odpowiedz

20

Zobacz perlrun.

perl -lpe's/:/@/g'  # assumes \n as input record separator 
perl -0 -lpe's/:/@/g' # assumes \0 as input record separator 

perl -lne'if (0 == $. % 2) { s/:/@/g; print; }' # modify and print even lines 

Tak, Perl może pojawić się w dowolnym miejscu potoku, podobnie jak awk.

+0

Wielkie dzięki. To działa. – user1129812

4

Przełącznik linii poleceń -p (jeśli chcesz drukować automatycznie) lub -n (jeśli tego nie chcesz) zrobi, co chcesz. Zawartość linii są w $ _ tak:

perl -pe's/\./\@/g'

byłoby rozwiązaniem. Ogólnie rzecz biorąc, chcesz przeczytać na temat "<>" (diament) operatora, który jest sposobem, aby przejść do nie-oneliners.

+2

Wymaga to również flagi -e, jeśli piszesz cały program w wierszu poleceń. (w przeciwnym razie nie uda się znaleźć skryptu Perla zatytułowanego "s/\\\\\\\") – SkryneSaver

Powiązane problemy