Terminal'de sed için + meta karakterini nasıl elde edersiniz?


2

Mac OS 1.7.4 ile gelen sed'e benziyor, +meta karaktersiz , orijinali Mac . +Meta karakter işlevini alabilir miyim ?

Yanıtlar:


1

+Bir olan GNU ait sedolduğunu birini veya önceki ifadenin daha eşleşir ancak OS X üzerinde sürümüdür BSDsed . MacPorts'ta bir GNU sürümü sedOS X'e taşındı . Aksi takdirde, geçici bir çözüm denemeniz gerekir.

Örneğin, bir veya daha fazla rakamla eşleştirmek için [0-9][0-9]*yerine[0-9]+


echo $'aaa\na\nb' | sed -n '/a\{1,\}/p'
Kıvrımlı

2

OS X'in uygulaması, sedvarsayılan olarak desteklemeyen "temel" normal ifade biçimini kullanır +. Kimden man re_format:

Obsolete (``basic'') regular expressions differ in several respects.  `|'
is an ordinary character and there is no equivalent for its functional-
ity.  `+' and `?' are ordinary characters, and their functionality can be
expressed using bounds (`{1,}' or `{0,1}' respectively).  Also note that
`x+' in modern REs is equivalent to `xx*'.  The delimiters for bounds are
`\{' and `\}', with `{' and `}' by themselves ordinary characters.  The
parentheses for nested subexpressions are `\(' and `\)', with `(' and `)'
by themselves ordinary characters. [...]

Ne yapabilirsin? Eh, bir olasılık, sedmodern formatı -Eanahtarla birlikte kullanmayı söylemektir . Ancak bu, (takas, örneğin uyacak şekilde RE diğer bölümlerini yeniden yazmak sizi zorlayabilir \( ... \)ile ( ... )). Başka bir seçenek, yukarıda önerilen alternatif formlardan birini kullanmaktır. Burada "A" ve ardından bir veya daha fazla "B" veya "C", ardından "D" ile eşleştirmek için çeşitli yaklaşımları kullanan örnekler verilmiştir:

sed -E 's/A[BC]+D/[match]/'
sed 's/A[BC]\{1,\}D/[match]/'
sed 's/A[BC][BC]*D/[match]/'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.