Добавьте '/' перед каждым символом строки (и после последнего)

использование PROMPT_COMMAND='/bin/echo -ne "\033k\033\0134"'в .bashrcвместе с shelltitle '$ |bash'в .screenrcотлично работает для меня. Использование этого конкретного PROMPT_COMMANDкаким-то образом ломает мою PS1, поэтому я также добавил следующее в.bashrc:

case "$TERM" in
    screen*) PROMPT_COMMAND='/bin/echo -ne "\033k\033\0134"';;
esac

Пример прикрепленного изображения -запуск сна в окне 0, поиск в окне 1, просмотр в окне 2, проверка связи в окне 3 и bash в окне 4.enter image description here

-2
24.09.2020, 16:06
6 ответов
echo "unix" | sed -e 's/\(.\)/\/\1/g' | sed -e 's/$/\//'

выход:

/u/n/i/x/
1
18.03.2021, 23:05
$ echo unix | sed -e 's,.,&/,g' -e 's,^,/,'
/u/n/i/x/

Это похоже на ответ NiteRain , но удаляет sedвызов, позволяя одному sedвыполнять два выражения, и упрощает используемое регулярное выражение, используя запятые в качестве альтернативного разделителя для s///команда.

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

Команда sedможет быть сокращена до sed 's,.,&/,g; s,^,/,', т. е. с использованием одного аргумента, содержащего обе подстановки, разделенные ;.


Используя GNU sed, вы также можете

$ echo unix | sed 's,.\{0\},/,g'
/u/n/i/x/

.\{0\}соответствует ровно нулю символов. GNU sedсопоставляет это выражение в -между каждым символом в строке.Другая реализация sedможет интерпретировать это как ошибку. Здесь OpenBSDsed:

$ echo unix | sed 's,.\{0\},/,g'
sed: 1: "s,.\{0\},/,g": RE error: empty (sub)expression
6
18.03.2021, 23:05

Одним из способов использования sed является добавление новой строки в конце.

$ echo Unix | sed -n 'G;s|.|/&|g;P'
/U/n/i/x/

Также можно использовать описанные ниже методы. Оба используют версии GNU awk n sed.

$ echo Unix | sed -e 's/./\n&/g;G' | paste -sd'/'
$ echo Unix | awk '{$1=OFS $1}++NF' FPAT=. OFS=/

Лучшим ресурсом для редактора sed является sed n awk О'Рейли, автор Dale Dougherty, et.al. Кроме того, общайтесь с такими группами, как эта, и учитесь у других подходов, которые помогут вам быстрее освоиться.

0
18.03.2021, 23:05

Некоторые решения GNU gawk:

$ echo "unix" | awk -v FS='' -v OFS='/' 'BEGIN { printf "/"}; $1=$1 { printf $0 }; END { print "/" } ' 
/u/n/i/x/
$

Вот еще один более короткий скрипт, который обрабатывает ведущие нули и не используетprintf:

$ echo "0unix" | awk -F '' -v OFS='/' '{$1=$1}1 { print "/"$0"/" }'
/0/u/n/i/x/
$

Другое решение:

$ echo "0unix" | awk -v FPAT='.' -v OFS='/' '{$1=$1}1 { print "/"$0"/" }'
/0/u/n/i/x/
$

Эти сценарии могут работать или не работать с другими реализациями языка AWK. В частности, особое значение установки FSв пустую строку приведет к появлению предупреждающего сообщения в некоторых версиях awk, таких как nawk. Обратите внимание, что FPATотносится к gawk.

-3
18.03.2021, 23:05

С любым awk в любой оболочке на каждой машине Unix:

$ echo 'unix' | awk '{gsub(/./,"/&"); print $0"/"}'
/u/n/i/x/
0
18.03.2021, 23:05
 echo "unix"| sed "s/./&\//g"
u/n/i/x/
0
18.03.2021, 23:05

Теги

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