Unix下如何^
用空格替换?
输入:
ab^cd^ef
输出:
ab cd ef
我已经尝试过sub(/^/, " & ", str)
,但输出与输入相同。
答案1
这就是工作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/^/ /}"
答案2
使用sed
,
$ echo "ab^cd^ef" | sed 's,\^, ,g'
ab cd ef
已经评论者:@jasonwryan您可以使用内联 shell 字符串替换,
$ str="ab^cd^ef"
$ echo "${str//^/ }"
ab cd ef
另一种,建议者@someonewithpc
$ echo "ab^cd^ef" | sed 'y,^, ,'
ab cd ef
(注:y
用于转换字符。)
答案3
假设您想将其替换awk
为您的
sub(/^/, " & ", str)
建议,您需要转义,^
因为它是扩展的正则表达式运算符(/^/
表示在字符串开头匹配):
sub(/\^/, " & ", str)
会将第一次出现的^
inside替换str
为^
(space-
^
-space)。用于sub(/\^/, " ", str)
替换为空格,并gsub(/\^/, " ", str)
替换所有出现的情况。
请注意,您不能使用assub(/[^]/, " & ", str)
^
恰好也是特殊的内部[...]
。但大多数awk
实现都支持sub(/[\^]/, " & ", str)
。