$ удара {VAR//поиск/замена} и странное regex поведение

Я вижу, что LSB включает и Perl и Python... Python, по крайней мере, включает http инструменты в стандартную библиотеку. Я не занимался расследованиями, чтобы видеть, передает ли LSB под мандат libwww-perl.

Если Вы не хотите писать что-нибудь сами, и Вы довольны выводом к stdout, можно сделать это:

python -murllib http://example.com/

И если Вы чувствуете себя действительно мотивированными, можно записать простому http клиенту в ударе.

8
28.08.2013, 05:57
3 ответа

Звуки мне Вы хотите удалить вещи между \[ и \]:

$ shopt -s extglob
$ printf '%s\n' "${PS1//\\\[*(\\[^]]|[^\\])\\\]/}"
(\u@\h)-(\t)-(\w)${git_branch}\n$

Однако bash замена так неэффективна, что Вы, вероятно, были бы более обеспеченным увольнением perl или sed здесь, или сделайте это в цикле как:

p=$PS1 np=
while :; do
  case $p in
    (*\\\[*\\\]*) np=$np${p%%\\\[*};p=${p#*\\\]};;
    (*) break;;
  esac
done
np=$np$p
printf '%s\n' "$np"

(это - стандартный POSIX sh синтаксис выше, BTW).

И если Вы хотите расширенную подсказку от этого:

ep=$(PS4=$np;exec 2>&1;set -x;:); ep=${ep%:}
6
27.01.2020, 20:11
  • 1
    мой день завершен, другой набор символов большего старшего волшебства от Первосвященника Командной строки, Stephane. Я клянусь для половины Ваших сообщений, мое внимание обращено к неправильной скорости в бодах, и я получаю экран путаницы :) И да, цель конца состояла в том, чтобы удалить все escape-последовательности: это не ударило меня, чтобы просто удалить между [ и ].спасибо! –  Drav Sloan 28.08.2013, 12:18

После некоторого руководства от jordanm (и чтение раздела "Pattern Matching" страницы справочника удара), оказывается, что эти шаблоны, используемые расширением параметра, не являются regex. Однако для моего конкретного случая, если shopt extglob идет, я могу сделать:

search='\\\[\\033\[*([0-9])m\\\]'

где *([0-9]) совпадает с [0-9]* в regex.

Кажется, что extglob обеспечивает некоторые механизмы, подобные regex с (из страницы справочника удара):

          ?(pattern-list)
                 Matches zero or one occurrence of the given patterns
          *(pattern-list)
                 Matches zero or more occurrences of the given patterns
          +(pattern-list)
                 Matches one or more occurrences of the given patterns
          @(pattern-list)
                 Matches one of the given patterns
          !(pattern-list)
                 Matches anything except one of the given patterns
5
27.01.2020, 20:11
  • 1
    Да, extglob реализует подмножество ksh расширенные шарики. ksh93 на самом деле имеет printf оператор для преобразования между шаблонами и (AT&T) REs (printf '%P\n' '\\\[[0-9]*\\\]' дает *\\\[*([0-9])\\\]*) –  Stéphane Chazelas 28.08.2013, 13:03

Pure Bash поддерживает полный набор последовательностей ANSI

# Strips ANSI CSI (ECMA-48, ISO 6429) codes from text
# Param:
# 1: The text
# Return:
# &1: The ANSI stripped text
strip_ansi() {
  shopt -s extglob
  printf %s "${1//$'\e'[@A-Z\[\\\]\^_]*([0-9:;<=>?])*([ \!\"#$%&\'()\^*+,\-.\/])[@A-Z\[\\\]\^_\`a-z\{|\}~]/}"
}
2
27.01.2020, 20:11

Теги

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