Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更换所有'/';与'\/';在bash/shell脚本中_Bash_Shell - Fatal编程技术网

更换所有'/';与'\/';在bash/shell脚本中

更换所有'/';与'\/';在bash/shell脚本中,bash,shell,Bash,Shell,这可能非常简单,但我一直坚持在shell/bash中完成这项工作。 我有类似“a/b/c/d”的输入,我想用“\/”替换所有“/”,输出将是“a/b/c/d” 另一个例子是12.12.12.12/32>>12.12.12\/32 任何帮助都将不胜感激。根据您访问要替换的文本或字符串的方式,类似的操作可能会奏效。您必须在sed命令中转义/和\ var='a/b/c/d' echo "$var" | sed 's/\//\\\//g' 根据您访问要在其中进行替换的文本或字符串的方式,类似的操作可能

这可能非常简单,但我一直坚持在shell/bash中完成这项工作。 我有类似“
a/b/c/d
”的输入,我想用“
\/
”替换所有“
/
”,输出将是“a/b/c/d”

另一个例子是
12.12.12.12/32
>>
12.12.12\/32


任何帮助都将不胜感激。

根据您访问要替换的文本或字符串的方式,类似的操作可能会奏效。您必须在sed命令中转义
/
\

var='a/b/c/d'
echo "$var" | sed 's/\//\\\//g'

根据您访问要在其中进行替换的文本或字符串的方式,类似的操作可能会起作用。您必须在sed命令中转义
/
\

var='a/b/c/d'
echo "$var" | sed 's/\//\\\//g'

您可以使用
bash
的参数扩展:

$ input="a/b/c/d"
$ echo "${input//\//\\/}"
a\/b\/c\/d

给定一个变量
input
${input//xxx/yyy}
生成
input
的内容,每个
xxx
替换为
yyy
。这里的
xxx
\/
/
必须转义才能与下一个
/
)和
yyy
\/
\/
转义为
\

您可以使用
bash
的参数扩展:

$ input="a/b/c/d"
$ echo "${input//\//\\/}"
a\/b\/c\/d
给定一个变量
input
${input//xxx/yyy}
生成
input
的内容,每个
xxx
替换为
yyy
。这里的
xxx
\/
/
必须进行转义,以避免与下一个
/
)混淆,
yyy
\/
\//code>转义为
\

仅使用bash

var='a/b/c/d'
echo "${var//\//\\/}"
仅使用bash

var='a/b/c/d'
echo "${var//\//\\/}"
这样做可以:

echo "12.12.12.12/32" |sed 's,/,\\/,g'
输出:

12.12.12.12\/32
在这种情况下,使用除
/
之外的分隔符,正如我在上面的示例中使用的
。例如,您可以使用:
#
…等

echo "12.12.12.12/32" |sed 's,/,\\/,g'
输出:

12.12.12.12\/32

在这种情况下,使用除
/
之外的分隔符,正如我在上面的示例中使用的
。您可以使用例如:
#
…等

当前,您的问题不清晰或不可理解。请使用格式化工具显示原始字符。对于初学者,您可以将示例部分放在反斜杠之间。
“…”
我编辑了这个问题以使反斜杠可见(正如@chryss所建议的)——如果这不是预期的,请恢复编辑。为什么要这样做?这并不是为了让sed可以接受,是吗?确切地说,我需要它只是为了让sed可以接受…还有其他方法吗?我可能根本不需要替换?是的,使用另一个分隔符,例如,
sed“s#$foo#$bar#g”
目前,你的问题不清晰或不可理解。请使用格式化工具显示原始字符。对于初学者,您可以将示例部分放在反斜杠之间。
“…”
我编辑了这个问题以使反斜杠可见(正如@chryss所建议的)——如果这不是预期的,请恢复编辑。为什么要这样做?这并不是为了让sed可以接受,是吗?确切地说,我需要它只是为了让sed可以接受…还有其他方法吗?我可能根本不需要替换?是的,使用另一个分隔符,例如
sed“s#$foo#$bar#g”
echo“$var”
,而不是
echo$var
;看见如果用户的输入是
*/*/3/4
,将扩展保留为不带引号将导致输出包含一个文件列表。好的,出于样式原因,这很公平。我已经改变了。然而,我一点也不希望这一部分与OP的脚本相关——我只是添加了它来挂起sed命令,在我提供输入的情况下,我控制它。如果我们是一个教学资源,那么演示可以安全地广泛应用的实践是很重要的。ABS在bash社区被视为如此贫乏的资源的部分原因与其说是完全不准确(尽管有一些),不如说是展示不安全做法的例子;这些实践往往会被复制和应用,即使它们只是偶然出现,也会导致人们从ABS那里学到编写错误代码。
echo“$var”
,而不是
echo$var
;看见如果用户的输入是
*/*/3/4
,将扩展保留为不带引号将导致输出包含一个文件列表。好的,出于样式原因,这很公平。我已经改变了。然而,我一点也不希望这一部分与OP的脚本相关——我只是添加了它来挂起sed命令,在我提供输入的情况下,我控制它。如果我们是一个教学资源,那么演示可以安全地广泛应用的实践是很重要的。ABS在bash社区被视为如此贫乏的资源的部分原因与其说是完全不准确(尽管有一些),不如说是展示不安全做法的例子;这些实践往往会被复制和应用,即使它们的出现只是偶然的,也会导致人们从ABS学习编写糟糕的代码。