Yanıtlar:
+
Bir olan GNU ait sed
olduğ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ü sed
OS 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]+
OS X'in uygulaması, sed
varsayı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, sed
modern formatı -E
anahtarla 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]/'
echo $'aaa\na\nb' | sed -n '/a\{1,\}/p'