Я был в этом для> 1 часа. и не могу понять это. Вот мой PS1
Строка подсказки:
$ echo $PS1
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]
Название окна терминала является Это заголовок
. \ [\ E] 2;
отмечает начало заголовка, а \ A \]
отмечает конец. См. «Настройка заголовка окна терминала» .
Согласно https://regex101.com/ , строка Regex \\\ [\\ E \] 2;. * \\ a \\\]
соответствовать названию и его побегу. Смотрите демонстрацию этого здесь: https://regex101.com/r/okcx0t/1 .
Следовательно, команда SED
должна удалить заголовок из строки PS1
и распечатать вывод, но, похоже, не совпадает со строкой заголовка! Как видно из ECHO $ PS1
, нет никакой разницы:
$ echo $PS1 | sed -E "s|\\\[\\e\]2;.*\\a\\\]||"
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]
$ echo $PS1
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]
Как я могу заменить эту строку заголовка в PS1
переменную, с или без SED
?
Мой SED
Command Command Command работает для простых совпадений. Смотри! Это название
явно удаляется с конца PS1
строки PS1 .
$ echo $PS1 | sed 's|this is the title||'
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;\a\]
Я просто не могу соответствовать началу строки титула, и заканчивая побег, это все!
'
против «
и т. Д. Ваша проблема заключается в том, что двойные кавычки позволяют оболочку заменить \\
на \
- вы можете увидеть это, если вы запустите команду С опцией Shell's -x
-x :
$ set -x
$ echo foo | sed -E "s|\\\[\\e\]2;.*\\a\\\]||"
+ echo foo
+ sed -E 's|\\[\e\]2;.*\a\\]||'
foo
Он должен работать, если вы изменены на одиночные цитаты вокруг выражения Sed Sed. Флаг -E
не требуется бывшего. Дано
$ printf '%s\n' "$ps1"
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]
тогда
$ set -x
$ printf '%s\n' "$ps1" | sed 's|\\\[\\e\]2;.*\\a\\\]||'
+ sed 's|\\\[\\e\]2;.*\\a\\\]||'
+ printf '%s\n' '\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ \[\e]2;this is the title\a\]'
\$SHLVL:2 \e[7m$(gs_git_show_branch)\e[m\n\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$