Используя sed для удаления и открытия и закрытия квадратной скобки вокруг строки

Насколько я знаю, что SCOM может сделать это для Вас, возможно, не к уровню байта как diff'ing диски, но от, окна конфигурируют перспективу, я вполне уверен, это сделает то, в чем Вы нуждаетесь.

18
задан 11 January 2013 в 12:38
5 ответов

Это легко, если внимательно следовать руководству : все члены внутри класса символов теряют особое значение (за некоторыми исключениями). И] теряет свое особое значение, если помещается первым в списке. Попробуйте:

$ echo '[123]' | sed 's/[][]//g'
123
$

Это говорит:

  1. внутри внешнего [скобок] замените любой из включенных символов, а именно:
    • ] и
    • [
  2. замените любой из них пустой строкой - следовательно, пустая строка замены // ,
  3. замените их везде ( глобально ) - отсюда последний g .

Опять же, ] должен быть первым в классе, когда он включается.

23
ответ дан 2 December 2019 в 20:20

Я не уверен, почему это не работает, но это работает:

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
11
ответ дан 2 December 2019 в 20:20

Чтобы удалить все до и после скобки:

$ echo '[123]' | sed 's/.*\[//;s/\].*//;'
123

Если ваши данные такие, всегда означающие начало и конец квадратными скобками:

$ echo '[123]' | sed 's/.//;s/.$//;'
123
4
ответ дан 2 December 2019 в 20:20

Если у вас более сложная строка как и 'abcdef

  • ghijk', вы также можете использовать внутреннюю команду bash 'cut' для извлечения текста только между квадратными скобками:

    $ echo 'abcdef[123]ghijk' | cut -d '[' -f 2 | cut -d ']' -f 1
    123
    
  • 1
    ответ дан 2 December 2019 в 20:20

    Вы можете избежать открывающей скобки, используя \ [. Для закрывающей скобки используйте []] .

    1
    ответ дан 2 December 2019 в 20:20

    Теги

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