Yanıtlar:
Bu bash kılavuzda, gerçekten, ama sen hangi aradığınızı bilmek yardımcı olur değil sen de aradığınızı bilmiyorsanız yararlı. Aradığınız Eğer [[
sizin tarafından deli diye [[ expression ]]
koşullu ifadesi bölümüne. Ek olarak, :space:
sizi aramak aynı bölümün altında iki örnekte de bulunmaktadır. Bu örnekte, ekmek kırıntısını takip edebilirsiniz:
Örneğin, sıfır, boşluk karakterleri, sıfır veya bir 'a' örneği içeren herhangi bir sayıdan oluşan bir karakter dizisi varsa, aşağıdakiler bir satır (kabuk değişken satırında saklanır) ile eşleşir. 'b':
[[ $line =~ [[:space:]]*?(a)b ]]
... [[:space:]]
bölümün "boşluk karakterlerine" karşılık geldiğini bir araya getirebildiğiniz , ancak bunun sadece edebi bir boşluk karakteri olduğunu ve tüm karakter sınıflarını temsil etmediğini düşündüğünüz için affedilebilir .
Eğer (??) " space"
, Çevrimiçi bash el kitabındaki dizgiyi (yani, "boşluk" kelimesini izleyen bir boşluk) ararsanız , üzerinden geçecek yaklaşık 32 maç "sadece" vardır. Onuncu kişi burada olacak:
'[' Ve ']' içinde karakter sınıfları [: class:] sözdizimi kullanılarak belirtilebilir, burada sınıf POSIX standardında tanımlanan aşağıdaki sınıflardan biridir:
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
Bir karakter sınıfı, o sınıfa ait herhangi bir karakterle eşleşir.
Bu da sizi "karakter sınıfı" terimini arayabileceğiniz ve bulabileceğiniz POSIX standardına götürecektir.
wctype, wctype_l - seni şu ana kadar götüren karakter sınıfını tanımlar :
Wctype () [CX] [Option Start] ve wctype_l () [Option End] işlevleri, geçerli yerel ayardaki [CX] [Option Start] karakter türü bilgileri tarafından tanımlanan kodlanmış karakter kurallarına göre wctype_t değerlerini belirler. veya yerel tarafından temsil edilen yerel ayarda, sırasıyla [Seçenek Sonu] (kategori LC_CTYPE).
Daha sonra setlocale bağlantısını izlediyseniz, nihayet Locale bölümünde gerçek cevabınızı alacaksınız :
uzay
Beyaz boşluk karakterleri olarak sınıflandırılacak karakterleri tanımlayın. POSIX yerelinde tam
<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>
olarak dahil edilecektir.Bir yerel ayar dosyasında, üst, alt, alfa, basamak, grafik veya xdigit anahtar sözcükleri için hiçbir karakter belirtilmemelidir.
<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>
Taşınabilir karakter kümesi ve sınıf boş yer alan herhangi bir karakter otomatik olarak bu sınıfa dahildir.
less +"$cmd"
için teşekkürler.
[]
içten bağımsız olduğunu tespit edemedikleri için affedilebilirler []
. Yanıtın ne olduğu hakkında fazla bir şey bilmeden, sorudan cevaba bir yol bulmaya çalıştım , ancak biraz şanslı tahminler aldı :)
Sadece Bash için değil, POSIX notasyonunun bir parçası.
POSIX Nedir?
POSIX veya "uniX için Taşınabilir İşletim Sistemi Arabirimi", bir (UNIX) işletim sisteminin desteklemesi gereken bazı işlevleri tanımlayan bir standartlar topluluğudur. Bu standartlardan biri, düzenli ifadelerin iki lezzetini tanımlar.
POSIX Parantez İfadeleri
POSIX parantezi ifadeleri özel bir tür karakter sınıflarıdır. POSIX parantezi ifadeleri, normal karakter sınıfları gibi, bir karakter kümesinden bir karakterle eşleşir.
Standart POSIX
[[:alnum:]] Alphanumeric characters
[[:alpha:]] Alphabetic characters
[[:blank:]] Space and tab
[[:cntrl:]] Control characters
[[:digit:]] Digits
[[:graph:]] Visible characters (anything except spaces and control characters)
[[:lower:]] Lowercase letters
[[:print:]] Visible characters and spaces (anything except control characters)
[[:punct:]] Punctuation (and symbols).
[[:space:]] All whitespace characters, including line breaks
[[:upper:]] Uppercase letters
[[:xdigit:]] Hexadecimal digits
Yok Standartlar
[[:ascii:]] ASCII characters
[[:word:]] Word characters (letters, numbers and underscores)
eski sözdizimi (birisi bunlara referans bulabilir mi?)
[[:<:]] Start of Word
[[:>:]] End of Word
Daha fazla bilgiyi burada bulabilirsiniz: wiki
[[:ascii:]]
Ve [[:word:]]
POSIX sınıfları (göründükleri olmayan bash
ya spesifik) ve ben bulamıyorum [[:<:]]
ne de [[:>:]]
ya. Daha iyi bir referans olabilir pubs.opengroup.org/onlinepubs/9699919799/basedefs/…
[[:ascii:]]
ve [[:word:]]
standart POSIX sınıfı değildir. için [[:<:]]
ve [[:>:]]
ben herhangi bir referans bulamıyorum, ama aynı isimli bir \b
. en.wikipedia.org/wiki/Regular_expression#Character_classes
[[:<:]]
ve kullanımlarını tanımlar : Bu, POSIX 1003.2
[[:ascii:]]
ve [[:word:]]
desen eşleştirme Bash ders çalışma değil, normal ifadelerde (sistemimde en azından, ben Bash sistemin regex kütüphanesini kullanır düşünüyorum). Bah.
Düzenli ifadelerde ve dosya adı globs / shell modellerinde, [...]
yapı, parantez içinde listelenenlerin herhangi bir karakteriyle eşleşir. Bu parantez içinde, bir dizi adlandırılmış standart karakter karakteri sınıfı kullanılabilir. Bunlardan biri, [:space:]
boşluk karakterleriyle eşleşen ( \s
Perl regexes'teki gibi ). Örneğin Bash'in kılavuzunda Örüntü Eşleştirme'ye bakınız.
Yani, [[:space:]]
düzenli bir ifadenin veya örüntü eşleşmesinin, yalnızca boşlukla eşleştirilen bir parçasıdır.
Ör. Bir desen eşleşmesi (standart kabuk, Bash'e özgü değil):
case $var in
*[[:space:]]*) echo "'$var' contains whitespace";;
esac
veya bir regex (Bash):
if [[ $var =~ [[:space:]] ]]; then
echo "'$var' contains whitespace"
fi
Parantez ifadelerinin [...]
normal ifadelerde ve kabuk modellerinde aynı şekilde çalışmasına rağmen , genellikle aynı olmadıklarını unutmayın . ( case
ve [[ string == pattern ]]
desen eşleşmeleri [[ string =~ regex ]]
kullanır, regex'ler kullanır.)
Normal ifadeler ayrıca kabuğa özgü değildir, örn. awk
Ve sed
de kullanılırlar ve örn. Linux adam sayfasında açıklanırlar.regex(7)
LESS=+'/Within \[ and \],' man bash
32n
harici komut yerine manuel eşleşmeyi bulmak daha kolay :-).