2016-03-23 17 views
1

1300 kelimeden oluşan çok satırlı çok uzun bir dizim var.Bash programlama Hızlı Arama ve Ekstraksiyon Metodu

DÜZENLEME: Dizgeden iki değeri aramak ve ayıklamak ve biçimlendirme ve ek işlemler için bir değişkene kaydetmek istiyorum.

Bir dizi ve devre hatlarının içine dize açmak ve ben de sadece tarafından dize arama yapabileceğinizi biliyor

while read -r line; do 
      arr+=("$line") 
    done <<< "$ACSCH" 

    for i in "${arr[@]}" 
    do 
      if [[ "$i" =~ "level 1: src="(.*)$ ]]; then 
        SRC=${BASH_REMATCH[1]} 
      fi 
      if [[ "$i" =~ "level 1: dst="(.*)$ ]]; then 
        DST=${BASH_REMATCH[1]} 
      fi 
    done 

her satırı arayabilirsiniz:

if [[ "$ACSCH" =~ "src="([[:alnum:]]*) ]]; then 
    SRC=${BASH_REMATCH[1]} 
fi 

ama yok

Ek değişkeni nasıl arayacağımı biliyorsunuz. Tek düşünebildiğim yöntem, tüm dizgede arama yapılıyorsa başka bir yere yerleştirmektir

if [[ "$ACSCH" =~ "DST="([[:alnum:]]*) ]]; then 
    DST=${BASH_REMATCH[1]} 
fi 

Bunu yapmanın doğru yolu mu yoksa daha iyi bir yolu var mı?

Hangi yol daha hızlı olur; Değişkenlerimi, diğer yöntemimi ya da henüz bilmediğim başka bir yöntemi bulmak için her satırı arıyor ve bu yüzden burada yardım arıyorum.

** DÜZENLEME: Numune GİRİŞİ: ........ src = 19r4345e3e bilinmeyen uzunluğu

Numune ÇIKIŞI metninin dst arasındaki = 1kje3dkj35 kalanı diğer bazı metin: SRC = 19r4345e3e | DST = 1kje3dkj35

Sonra daha da benim SRC ve DST değişkenleri işleyebilir. **

teşekkürler! --E

+0

Lütfen soruya o örnek giriş için örnek girişi ve istediğiniz çıktıyı ekleyin. – Cyrus

+0

Smaple girişini eklemek istemiyorum çünkü büyük bir metin değişkeni. – eherr9633

cevap

1

Eğer dizeleri "kelime1", "kelime2", "dize boşluk ve word3 ile" ve "word4" bulmak istiyorum , şunları kullanabilirsiniz:

echo "$ACSCH" | grep -Eo "word1|word2|string with spaces and word3|word4" 

daha varsa Aranacak sözcükler, grep seçeneği -f'u düşünün.

+0

'un üstündeki örnek çıktıyı sağladım Bu bana yardım etmiyor - Ben inanıyorum - Geri dönüş modellerini sadece kabuk – eherr9633

+0

eko değil değişkenlere saklamak istiyorum Ve vars ile ne yapmak istiyorsunuz? Onları bir diziye atayabilir veya 'while read -r line 'komutunu kullanabilir ve her satırı" printf var $ i "% s" "$ {line}" ile bir varlığa atayabilirsiniz; '((I) ++) –