2012-11-29 15 views

Odpowiedz

12

Z sed:

var=$(echo -e "AAA\nBBB" | sed -n '2p') 

Z awk:

var=$(echo -e "AAA\nBBB" | awk 'NR==2') 

Następnie wystarczy, echo zmienną:

echo "$var" 
0

Jak to:

var=$(echo -e 'AAA\nBBB' | sed -n 2p) 
echo $var 
BBB 
1

Można to zrobić przez potokiem wyjście przez głowę/Tail - var=$(cmd | tail -n +2 | head -n 1)

4

połączeń read dwukrotnie:

echo -e "AAA\nBBB" | { read line1 ; read line2 ; echo "$line2" ; } 

Pamiętaj, że musisz się {} więc upewnij się, że obie komendy otrzymują ten sam strumień wejściowy. Ponadto, zmienne nie są dostępne poza {}, więc to robi nie praca:

echo -e "AAA\nBBB" | { read line1 ; read line2 ; } ; echo "$line2" 
+4

Aby uzyskać zmienny istnieją poza bloku użyciu sposobu, który nie pociąga za sobą rurę [proces zastępowania] (http: // www .gnu.org/software/bash/manual/bashref.html # Process-Substitution) '{read line1; przeczytaj line2; } <<(command) 'lub [here-string] (http://www.gnu.org/software/bash/manual/bashref.html#Here-Strings)' output = $ (command); {przeczytaj wiersz 1; przeczytaj line2; } <<< "$ output" ' –

+0

@glennjackman Podaj odpowiedź, którą podajesz w swoim komentarzu, ponieważ jest to najlepsza podana do tej pory (wszystkie inne używają przesady' sed' lub 'awk' lub' tail'/' head-combo). –

+0

Dane wejściowe @glenn jackman powyżej są tak cenne! – RAM237

2

Można użyć sed:

SecondLine=$(Your_command |sed -n 2p) 

Na przykład:

echo -e "AAA\nBBBB" | sed -n 2p 

Ty zmień numer zgodnie z linią, którą chcesz wydrukować.

0

w skrypcie bash: Zmienna = echo "AAA\nBBB" | awk "NR==2"

1

pomocą tablicę ze zwiększeniem parametrów uniknąć podpowłok:

str="AAA\nBBB" 
arr=(${str//\\n/ }) 
var="${arr[1]}" 
echo -e "$str" 
+0

+1 za sugerowanie potężnej wbudowanej funkcji. Czy spacja pomiędzy '/' i '}' jest naprawdę potrzebna? –

+1

Tak, bez spacji, podłańcuch nie ma poprawnego zamiennika w celu zdefiniowania oddzielnych elementów tablicy. – koola

Powiązane problemy