2017-10-31 4 views
0

Ich habe eine Variable im Shell-Skript, die wie folgt aussieht. Jede Zeile wird durch ein Zeilenumbruchzeichen getrennt.Zeile lesen, die einen bestimmten Text in einer Shell-Skript-Variablen enthält

var="This is the first line 
This is the second line 
This is the third line 
/home/usr/new/foo.txt 
This is the forth line 
This is the fifth line" 

Jetzt muss ich die Zeile lesen, die .txt darin enthält und speichern sie in einer anderen Variablen.

another_var=/home/usr/new/foo.txt 
+1

Arbeitete wie Charme, danke :) – Rohit

+1

Schätzen Sie es nützlich finden. Könnten Sie die Frage auch mit den von Ihnen ausprobierten Bemühungen aktualisieren, so dass dies in Zukunft hilfreich wäre? – Inian

+1

Ich denke 'grep' könnte Zeilen auswählen ... Wie in' var2 = "$ (echo" $ var "| grep '.txt $')" ' –

Antwort

1

In den neuesten Versionen von bash sollten Sie mapfile Befehl zur Verfügung, die Ihnen eine mehrzeilige Zeichenfolge analysieren kann. Wir analysieren die Zeichenfolge in ein Array und die Zeile passen, welche die glob Zeichenfolge .txt und drucken Sie es als

mapfile -t new_array <<< "$var" 

for element in "${new_array[@]}"; do 
    if [[ $element == *".txt"* ]]; then 
     new_var="$element" 
     break 
    fi 
done 
2

Das ist mehr generisch.

#!/bin/bash 

var="This is the first line 
This is the second line 
This is the third line 
/home/usr/new/foo.txt 
This is the forth line 
This is the fifth line" 

dog="$(echo "$var" | grep txt)" 
echo $dog 

Ich habe bash verwendet, aber ich glaube, das würde auch mit ksh funktionieren.

Ich habe nicht bemerkt, dass Zsigmond dies bereits vorgeschlagen hat.

Verwandte Themen