Как заменить «^» пробелом?

Так как я не нашел простого / понятного / "сразу приступить к делу" решения, мне пришлось сделать скромное, с исправлениями, рефакторингом и другими вариантами в будущем.

-> https://github.com/AymenDaoudi/NeTraf

4
29.08.2016, 06:49
3 ответа

Предположим, вы хотите выполнить замену в awk в качестве подпрограммы

 (/ ^ /, "&", str) 
 

предлагает экранировать ^ , поскольку это расширенный оператор регулярного выражения ( / ^ / означает совпадение в начале строки) :

sub(/\^/, " & ", str)

заменит первое вхождение ^ в str на ^ (пробел- ^ -пространство). Используйте sub (/ \ ^ /, "", str) для замены на пробел и gsub (/ \ ^ /, "", str) для замены каждого вхождения.

Обратите внимание, что вы не можете использовать sub (/ [^] /, "&", str) , поскольку ^ также является особенным внутри [.. .] . Большинство реализаций awk поддерживают sub (/ [\ ^] /, "&", str) .

2
27.01.2020, 20:44

Это задание для 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/^/ /}"
17
27.01.2020, 20:44

Использование 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 используется для преобразования символов.)

7
27.01.2020, 20:44

Теги

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