Как использовать sed для замены нескольких символов?

Такие команды, как xmodmap, могут выполняться только в X-окне,

Вы должны создать файл dot.desktopв папке автозапуска xdg, например, создать файл ~/.config/autostart/startup.desktopи поместить в него эти строки:

Exec=~/bin/startup.sh

Подробнее см. по этой ссылке

0
14.12.2019, 20:51
2 ответа

Ваша команда сработала бы, если бы вы избежали фигурных скобок (Я также процитировал $1, который вы оставили без кавычек по неизвестным причинам):

$ set -- 3
$ echo 12345 | sed "s/^\(.\{$1\}\)/\1hi/"
123hi45

Модификатор повторения {n}является расширенным модификатором регулярного выражения, который в базовом регулярном выражении записывается как \{n\}. Утилита sedпо умолчанию использует базовые регулярные выражения.

Вы сэкономите несколько символов, переписав его как

echo 12345 | sed "s/^.\{$1\}/&hi/"

Лично я выбрал бы другой подход...


Вы хотите добавить строку hiпосле третьего символа в 12345, где «третий» задается значением в $1.

echo 12345 | sed 's/./&hi/'"$1"

Когда $1равно 3, тогда выражение sedбудет выглядеть как

s/./&hi/3

Это заменит 3-е совпадение.(любого символа )тем же самым символом (. Это то, что &делает при замене ), за которым следует hi.

Ввод цифры nв конце команды sв sedподобным образом приводит к тому, что sedзаменяет n:-е совпадение шаблона.

Тестовый запуск (с измененным вводом и заменой для удобства чтения):

$ set -- 3
$ echo abcde | sed 's/./&<hi>/'"$1"
abc<hi>de
$ set -- 4
$ echo abcde | sed 's/./&<hi>/'"$1"
abcd<hi>e
$ set -- 1
$ echo abcde | sed 's/./&<hi>/'"$1"
a<hi>bcde
4
28.01.2020, 02:17

У меня работает следующее:

#!/bin/sh

n=$1

echo 12345 | sed -r "s/(^.{$n})/\1hi/"

Это требует использования опции -rдля sed, чтобы указать расширенное регулярное выражение(-Eна macos ). Я не уверен, как ваш ввод будет передан в сценарий (12345), поэтому я просто оставил его, как в вашем примере.

0
28.01.2020, 02:17

Теги

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