Я запускаю эту команду в оболочке bash на Ubuntu 12.04.1 LTS. Я пытаюсь удалить [
и ]
символы, и символы одним махом, т. Е. Без необходимости переадресации к sed во второй раз.
Я знаю, что квадратные скобки имеют особое значение в регулярном выражении, поэтому я избегаю их, добавляя обратную косую черту. Результат, который я ожидал, - это просто строка, 123
но квадратные скобки остались, и я хотел бы знать, почему!
~$ echo '[123]' | sed 's/[\[\]]//'
[123]
str='[123]'; str1=${str/\[/}; str2=${str1/\]}; echo $str2
Ответы:
Это легко, если вы будете тщательно следовать руководству : все члены внутри класса персонажей теряют особое значение (за некоторыми исключениями). И] теряет свое особое значение, если он помещается первым в списке. Пытаться:
Это говорит:
]
и[
//
,g
.Опять же,
]
должен быть первым в классе, когда он включен.источник
Я не уверен, почему это не работает, но это работает:
или это:
Вы также можете попробовать другой подход и сопоставить строку внутри скобок (при условии, что строка может быть сопоставлена легко и не определяется скобками):
У меня те же проблемы с вашим оригинальным регулярным выражением,
grep
поэтому я подозреваю, что это не простоsed
вещь.Как ни странно, они дают разные результаты, но один из них соответствует тому, что вы хотите:
Применим это к вашему оригиналу
sed
(и добавим/g
модификатор, чтобы убрать обе скобки):источник
tr
:echo '[123]' | tr -d '[]'
- избегает путаницы регулярных выражений о побеге.tr
могу перевести только один символ максимум за раз, но я ошибся. Благодарность!Чтобы удалить все до и после скобок:
Если ваши данные такие, то это всегда означает начало и конец в квадратных скобках:
источник
Если у вас есть более сложная строка, такая как 'abcdef [123] ghijk', вы также можете использовать внутреннюю команду bash 'cut', чтобы извлечь текст только в квадратных скобках:
источник
Вы можете избежать открывающей скобки, используя
\[
. Для закрывающей скобки используйте[]]
.источник