2016-04-05 14 views
0

Sed'den beklediğim davranışı alamıyorum.Sed çoklu arama terimleri

Görebildiğim kadarıyla

, ben kullanmak mümkün olmalıdır:

sed -e 's/findfirsthing/replace/;s/findsecondthing/replace/' 

Ancak başarısız oldu. Aşağıdaki çıktıdan da görebileceğiniz gibi. Her ne kadar "ca." ve "ca-a." Aramadan, sadece kısmen çalıştı. Ben beklenebilir

macbook:labs alex$ cat ca_vip.txt 
ca.1 
ca-a.2 
3 
4 

macbook:labs alex$ cat vip.sh 
#!/bin/bash 
    for line in `cat ca_vip.txt` 
     do 
     if [[ $line =~ [ca.*] || [ca-a.*] ]] 
     then 
      echo $line | sed -e 's/ca.//;s/ca-a.//' >> temporary.txt 
       elif [ $line != [ca.*] || [ca-a.*] ] 
      then 
      echo $line >> temporary.txt 
     fi 
    done 

macbook:labs alex$ ./vip.sh 

macbook:labs alex$ cat temporary.txt 
1 
a.2 
3 
4 

çıktısı:

1 
2 
3 
4 
+0

Neden bash satırlarını okumak için bir for döngüsü kullanıyorsunuz ve onları sed olarak yankılıyorsunuz? Tüm senaryonuz neredeyse tam olarak 'sed -e'/ca .//; s/ca-a .// '> temporary.txt' ile eşdeğerdir, tek fark' echo 'nun boşlukları değiştirmesidir. –

cevap

1

senin desenler da döngüler gerekmez, bunları birleştirmek için, daha iyi örtüşmektedir. Satır başına birden fazla değişiklik yapmak isterseniz, g sonekini ekleyin.

+0

OP, sed -r '/ ca (-a)? \ .//' <<< "ca.1 ca.2 ca.3" 'ile ne istediğini net değil. –

+0

sağ thx, not eklendi. – karakfa