Так как я не нашел простого / понятного / "сразу приступить к делу" решения, мне пришлось сделать скромное, с исправлениями, рефакторингом и другими вариантами в будущем.
Предположим, вы хотите выполнить замену в awk
в качестве подпрограммы
(/ ^ /, "&", str)
предлагает экранировать ^
, поскольку это расширенный оператор регулярного выражения ( / ^ /
означает совпадение в начале строки) :
sub(/\^/, " & ", str)
заменит первое вхождение ^
в str
на ^
(пробел-
^
-пространство). Используйте sub (/ \ ^ /, "", str)
для замены на пробел и gsub (/ \ ^ /, "", str)
для замены каждого вхождения.
Обратите внимание, что вы не можете использовать , поскольку sub (/ [^] /, "&", str)
^
также является особенным внутри [.. .]
. Большинство реализаций awk
поддерживают sub (/ [\ ^] /, "&", str)
.
Это задание для tr
:
$ str=ab^cd^ef
$ printf '%s\n' "$str" | tr '^' ' '
ab cd ef
В bash
, ksh93
, mksh
, zsh
:
printf '%s\n' "${str//^/ }"
В zsh
:
print -rl -- "${str:gs/^/ /}"
Использование sed
,
$ echo "ab^cd^ef" | sed 's,\^, ,g'
ab cd ef
Уже , прокомментированный @jasonwryan , вы можете использовать замену строки встроенной оболочки,
$ str="ab^cd^ef"
$ echo "${str//^/ }"
ab cd ef
Другой вариант, предложенный @someonewithpc
$ echo "ab^cd^ef" | sed 'y,^, ,'
ab cd ef
(Примечание: y
используется для преобразования символов.)