Насколько я знаю, что SCOM может сделать это для Вас, возможно, не к уровню байта как diff'ing диски, но от, окна конфигурируют перспективу, я вполне уверен, это сделает то, в чем Вы нуждаетесь.
Это легко, если внимательно следовать руководству : все члены внутри класса символов теряют особое значение (за некоторыми исключениями). И] теряет свое особое значение, если помещается первым в списке. Попробуйте:
$ echo '[123]' | sed 's/[][]//g'
123
$
Это говорит:
]
и [
//
, g
. Опять же, ]
должен быть первым в классе, когда он включается.
Я не уверен, почему это не работает, но это работает:
echo '[123]' | sed 's/\(\[\|\]\)//g'
или это:
echo '[123]' | sed -r 's/(\[|\])//g'
Вы также можете попробуйте другой подход и сопоставьте строку внутри скобок (предполагая, что строка может быть легко сопоставлена и не определяется скобками):
echo '[123]' | egrep -o "[0-9]+"
У меня такие же проблемы с исходным регулярным выражением, используя grep
поэтому я подозреваю, что это не просто sed
.
Как ни странно, они дают разные результаты, но один из них соответствует тому, что вы хотите:
echo '[123]' | egrep -o '[^][]+'
123
echo '[123]' | egrep -o '[^[]]+'
3]
Применяя это к исходному sed
(и добавляя модификатор / g
, он удаляет оба ] скобки):
echo '[123]' | sed 's/[][]//g'
123
Чтобы удалить все до и после скобки:
$ echo '[123]' | sed 's/.*\[//;s/\].*//;'
123
Если ваши данные такие, всегда означающие начало и конец квадратными скобками:
$ echo '[123]' | sed 's/.//;s/.$//;'
123
Если у вас более сложная строка как и 'abcdef
$ echo 'abcdef[123]ghijk' | cut -d '[' -f 2 | cut -d ']' -f 1
123
Вы можете избежать открывающей скобки, используя \ [
. Для закрывающей скобки используйте []]
.