sed如何取代“sed”&引用;(反斜杠和空格)?

sed如何取代“sed”&引用;(反斜杠和空格)?,sed,substitution,Sed,Substitution,在bash脚本中,带有空格的文件显示为“File\with\spaces.txt”,我想用\uu或+替换这些斜杠空格 我怎么能让塞德这么做?我没有成功地使用 $1=~/File\ with\ spaces.txt ext=$1 web=$(echo "$ext" | sed 's/\ /+/') 如果有比通过sed更好的方法,我愿意接受建议 [EDIT]:Foo-Bah的解决方案运行良好,但它只替换第一个空格,因为它后面的文本被视为参数,而不是$1的一部分。有办法吗 sed 's/\\\\ /

在bash脚本中,带有空格的文件显示为
“File\with\spaces.txt”
,我想用
\uu
+
替换这些斜杠空格

我怎么能让塞德这么做?我没有成功地使用

$1=~/File\ with\ spaces.txt
ext=$1
web=$(echo "$ext" | sed 's/\ /+/')
如果有比通过sed更好的方法,我愿意接受建议

[EDIT]:Foo-Bah的解决方案运行良好,但它只替换第一个空格,因为它后面的文本被视为参数,而不是$1的一部分。有办法吗

sed 's/\\\\ /+/';

\\\\
在shell级别求值为
\
,然后在sed中求值为文本
\

是否要转义斜杠:

web=$(echo "$ext" | sed 's/\\ /_/g')

Sed可以将
\
识别为空间:

bee@i20 ~ $ echo file\ 123 | sed 's/\ /+/'
file+123
但是,您的bash脚本语法完全错误。 不确定您试图对脚本执行什么操作,但下面是一个用
+
替换空格的示例:

ext=~/File\ with\ spaces.txt
web=`echo "$ext" | sed 's/\ /+/g'`
echo $web
Upd:
哦,您需要
g
标志来替换所有出现的空格,而不仅仅是第一个空格。固定在上面。

单引号是你的朋友 以下内容应与$1和$2的单引号参数一起使用

#!/bin/bash
ESCAPE='\\'
if [ $# -ne 2 ];then   
  echo "$0 <TO_ESCAPE> <IN_STRING>"
  echo args should be in single quotes!! 
  exit 1
fi

TO_ESCAPE="${1}"
IN_STRING="${2}"

if [ ${TO_ESCAPE} = '\' ];then
  TO_ESCAPE='\\'
fi
echo "${IN_STRING}" | sed "s/${TO_ESCAPE}/${ESCAPE}${TO_ESCAPE}/g"
#/bin/bash
转义='\\'
如果[$#-ne 2];然后
回显“$0”
echo args应使用单引号!!
出口1
fi
TO_ESCAPE=“${1}”
IN_STRING=“${2}”
如果[${TO_ESCAPE}='\'];然后
TO_ESCAPE='\\'
fi
echo“${IN_STRING}”sed“s/${TO_ESCAPE}/${ESCAPE}${TO_ESCAPE}/g”

不,那是错的。这将替换实际的反斜杠+空格。这就是问题(或问题标题)所要求的-bash的输出包括反斜杠,反斜杠+空格的组合需要替换为下划线。OTOH,我想问题(问题主体)可能不太确定它需要什么。Lettbee的解决方案效果最好
sed的/\/+/g'
就是我要找的。好的,用
ext=$1
替换第一行就行了。并使用适当的参数运行。不过,这只替换第一个空格。在这之后,分隔的单词将被视为参数。耶!这一切都是关于
g
:)非常感谢!一个简单的替代方法是使用
tr
:即
tr——删除“\\\n”
,如果您使用了双引号,您是对的;因为使用了单引号,所以shell不会删除一层反斜杠。