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

Как можно заменить пробелом в Unix?

Входные данные:

 ab^cd^ef 

Вывод:

 ab cd ef 

Я попробовал sub(/^/, " & ", str) но вывод такой же, как и вход.

  • Извлеките значение из вывода команды и используйте значение в качестве параметра для следующей команды
  • Как удалить текст до и после слова
  • проанализировать учетные данные из файла конфигурации PHP
  • Разделить файл, сравнивая два поля в файлах
  • Текущая дата в awk
  • Получать значения по блоку в одном файле
  • Изменение символа с другим шаблоном в текстовом файле
  • Объединение нескольких полей отдельно на основе одной (ключевой) колонки
  • 3 Solutions collect form web for “Как заменить «^» на пробел?”

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

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

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

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

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

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

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

    Linux и Unix - лучшая ОС в мире.