Как я могу дать BSD команду sed интерпретировать escape-последовательности как \n и \t?

Нажмите Alt + F2 и войдите gconf-editor. Переместитесь по древовидному меню на рабочий стол> гном> сессия> необходимые компоненты. Теперь, замените windowmanager ключ с менеджером окон по Вашему выбору. Просто замените гнома-wm (или метагород) с бормотанием.

Другое возможное решение:

Вы могли добавить mutter --replace к Системе> Предпочтения> Приложения Запуска, который открывается gnome-session-properties программа:

enter image description here

14
04.07.2012, 20:07
3 ответа

Если необходимо записать портативные сценарии, необходимо придерживаться функций в стандарте POSIX (иначе Единственный Unix иначе Спецификация Основы Open Group). Выпуск 7 иначе POSIX-1.2008 является последним, но много систем не закончили принимать его все же. Выпуск 6 иначе POSIX-1.2001 в общем и целом обеспечивается всеми современными нельдами.

В sed, значении escape-последовательностей как \t и \n не является портативным, за исключением того, что в regex, \n обозначает новую строку. В тексте замены для s команда, \n не является портативным, но можно использовать новую строку обратной косой черты последовательности для положения новую строку.

Портативный способ генерировать символ табуляции (или любой другой символ, выраженный в восьмеричном), с tr. Сохраните символ в переменной оболочки и замените этой переменной в sed отрывке.

tab=$(echo | tr '\n' '\t')
escape=$(echo | tr '\n' '\033')
embolden () {
  sed -e 's/^/'"$escape"'[1m/' -e 's/$/'"$escape"'[0m/'
}

Обратите внимание снова, что новые строки должны быть выражены по-другому в regexes и в s тексты замены.

Вы могли бы хотеть использовать awk вместо этого. Это позволяет Escape обратной косой черты, включая восьмеричные Escape \ooo, в каждом строковом литерале.

6
27.01.2020, 19:51

Можно использовать удар $'...' заключение в кавычки для интерпретации Escape прежде, чем передать строку sed.

Из страницы справочника удара:

   Words  of  the  form  $'string'  are  treated specially.  The word
   expands to string, with backslash-escaped characters  replaced  as
   specified  by the ANSI C standard.  Backslash escape sequences, if
   present, are decoded as follows:
          \a     alert (bell)
          \b     backspace
          \e     an escape character
          \f     form feed
          \n     new line
          \r     carriage return
          \t     horizontal tab
          \v     vertical tab
          \\     backslash
          \'     single quote
          \nnn   the eight-bit character whose  value  is  the  octal
                 value nnn (one to three digits)
          \xHH   the eight-bit character whose value is the hexadeci-
                 mal value HH (one or two hex digits)
          \cx    a control-x character

   The expanded result is single-quoted, as if the  dollar  sign  had
   not been present.

   A  double-quoted  string  preceded by a dollar sign ($) will cause
   the string to be translated according to the current  locale.   If
   the  current locale is C or POSIX, the dollar sign is ignored.  If
   the string is translated and replaced, the replacement is  double-
   quoted.
7
27.01.2020, 19:51

Этому ответили на Переполнении стека:

https://stackoverflow.com/questions/1421478/how-do-i-use-a-new-line-replacement-in-a-bsd-sed

Это в значительной степени точно что сказанный jw013.

Для вставки литерального типа вкладки ctrl+VTab.

3
27.01.2020, 19:51
  • 1
    благодарит за ссылку. Я ненавижу тот свой Google, поиски не возвратили тот :D –  ephsmith 04.07.2012, 20:57
  • 2
    Предложение вкладки ctrl-V зависимо от оболочки, например, оно не будет работать у рыбы. –  anddam 05.03.2014, 15:44
  • 3
    Никогда используя рыбу я не знал, но хороший для знания. –  bahamat 05.03.2014, 20:38

Теги

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