Yanıtlar:
Diğer birkaç yol:
sed
sed 's/.*(\(.*\))/\1/' file
perl
perl -pe 's/.*\((.*)\)/$1/' file
veya
perl -lanF"[()]" -e 'print $F[1]' file
veya
perl -pe 's/.*\((.+?)\).*/$1/;' file
awk
awk -F"[()]" '{print $2}' file
kabuk
while IFS="()" read a b; do echo "$b"; done < file
-F
satırı alanlara ayırmak için hangi karakterleri kullanacağını seçmenizi sağlar. Burada, []
parantez açma ve kapamadan oluşan bir karakter sınıfı ( ) veriyorum . Bu yüzden üzerinde çizgi bölecek (
ve üzerinde )
. Sonuç olarak, 2. alan parantezin içeriği olacaktır. Örneğin, dize ile G8 = P(G1,G3)foo
, $1
olacak G8 = P
, $2
olacak G1,G3
ve $3
olacak foo
.
grep -oP '\(\K[^)]+' file
Bu, açılış parantezini arar, yok sayar, ardından izleyen tüm parantez dışı karakterleri yazdırır.
GNU grep gerektirir
sed 's/^.*(//;s/)$//' /path/to/file
Bunu yıkmak için:
sed
olan s
Team, ed
in-. 's/^.*(//;s/)$//'
şu şekilde bozulan komut dosyasının gönderildiği sed
komuttur:
s/^.*(// substitute nothing for the beginning of any line (`^`) followed by anything up until an open-paren (`(`)
s/)$// substitute nothing for a close-paren (`)`) followed immediately by the end of a line