Linux中使用sed替换多个字符

Linux中使用sed替换多个字符,linux,bash,sed,Linux,Bash,Sed,我在Linux中有一个变量,如下所示。这不是一个有效的变量,我刚才创建它是为了测试如何用一些新字符替换字符 table=123~!@#$%^&*()+|}{:"?><-=[]\;',./ 在Linux中如何实现这一点?将其传输到sed,并用下划线替换任何非^字母数字[:alnum://code> sed 's/[^[:alnum:]]/_/g' 在您的代码中,这看起来像: table1=$(echo table | sed 's/[^[:alnum:]]/_/g') 通

我在
Linux
中有一个变量,如下所示。这不是一个有效的变量,我刚才创建它是为了测试如何用一些新字符替换字符

table=123~!@#$%^&*()+|}{:"?><-=[]\;',./

在Linux中如何实现这一点?

将其传输到
sed
,并用下划线
替换任何非
^
字母数字
[:alnum://code>

sed 's/[^[:alnum:]]/_/g'
在您的代码中,这看起来像:

table1=$(echo table | sed 's/[^[:alnum:]]/_/g')

通过管道将其连接到
sed
,并用下划线
替换任何非
^
字母数字
[:alnum:][/code>

sed 's/[^[:alnum:]]/_/g'
在您的代码中,这看起来像:

table1=$(echo table | sed 's/[^[:alnum:]]/_/g')

tr相同

tr -c '[:alnum:]' _  <file

tr-c'[:alnum:][up>与
tr相同

tr -c '[:alnum:]' _  <file

tr-c'[:alnum:]['修复了反斜杠。在过去的两天里,我在windows和linux之间切换的次数太多了,现在我把正反斜杠都搞混了。这有点像地狱。您的命令对
$
*
和其他字符不起作用。例如,如果我的表名是
pd$123
,我得到的结果是
pd
not
pd_123
修复了反斜杠。在过去的两天里,我在windows和linux之间切换的次数太多了,现在我把正反斜杠都搞混了。这有点像地狱。您的命令对
$
*
和其他字符不起作用。例如,如果我的表名是
pd$123
,我得到的结果是
pd
not
pd_123
我在表后得到一个额外的
。我试着像
table1=$(echo$table | tr-c'[:alnum:'')
echo
添加一个新行,它也会被转换。您可以设置
echo-n
来消除这种情况。TI已更改为
echo-n
,但对于
$
*
这不会替换字符,例如,如果我的表名是
pd$123
,我得到的结果是
pd
而不是
pd_123
对于特殊字符
bash
干扰,它扩展为$123
,很可能没有分配给任何对象。您需要单引号将要隐藏的字符串从
bash
中引用。我将在表后获得一个额外的
。我试着像
table1=$(echo$table | tr-c'[:alnum:'')
echo
添加一个新行,它也会被转换。您可以设置
echo-n
来消除这种情况。TI已更改为
echo-n
,但对于
$
*
这不会替换字符,例如,如果我的表名是
pd$123
,我得到的结果是
pd
而不是
pd_123
对于特殊字符
bash
干扰,它扩展为$123
,很可能没有分配给任何对象。您需要单引号将字符串隐藏在
bash
中。