这个命令 sed 's/~/ /g' 做什么?

这个命令 sed 's/~/ /g' 做什么?

我最初将一组 6 个参数传递给脚本。

Script.sh a b c d e f

脚本中管理参数的命令之一;

comm=$(echo $1 |sed 's/~/ /g')

答案1

sed表达式s/~/ /g将每个波形符替换为空格字符。从字面上看,它的意思是“~全局(在整个输入行上)用空格替换与正则表达式匹配的所有内容”。在这种情况下,表达式也可以写为“更快” y/~/ /,并且整个sed命令可以由“更快”替换tr '~' ' '

在 中bash,这可以更有效地完成

comm=${1//\~/ }

必须~在此处转义或引用,以免扩展为当前用户主目录的路径名。

在任何情况下,$1如果您使用它,则需要用双引号引起来echo(除非您希望 shell glob 扩展为文件名),并且理想情况下,该命令将被写入printf(这可以避免初始破折号$1被解释为某些选项的开头echo,并避免在某些情况下解释某些反斜杠序列):

comm=$( printf '%s\n' "$1" | tr '~' ' ' )

有关的:

相关内容