Имеет ли значение порядок в классах символов регулярных выражений sed (например, [abc])?

Если вы не возражаете против внешнего вызова, используйте awk или sed:

$ string="first second third fourth"
$ echo "${string}" | awk '{print $1}' # will work even with tabs
first
$ echo "${string}" | sed -e "s/.*$//" # will fail on leading whitespace
first
1
25.02.2020, 14:35
1 ответ

Есть несколько правил. Важным в этом случае является то, что -является операцией диапазона, поэтому вы можете сказать a-f, а не abcdefвнутри класса. Включить -в качестве литерала проще всего, если это последний символ в классе, но он может быть первым или любым концом диапазона.

Если вы хотите инвертировать набор символов, то первый символ должен быть ^. Чтобы включить его как литерал, он не должен быть первым.

Поскольку ]завершает класс, существует особый случай, который позволяет ему быть первым (или вторым, если первый символ ^отрицает класс ), поэтому []abc]является набором из 4 символов,abcили ].

2
28.04.2021, 23:22

Теги

Похожие вопросы