在bash脚本中,带有空格的文件显示为"File\ with\ spaces.txt"
,我想用_
或+
替换这些带斜线的空格。
我怎么能告诉sed这样做?我没有成功使用;
$1=~/File\ with\ spaces.txt
ext=$1
web=$(echo "$ext" | sed 's/\ /+/')
如果有比sed更好的方法,我愿意接受建议。
[编辑]:Foo Bah的解决方案运行良好,但它只替换第一个空格,因为它后面的文本被视为参数而不是$ 1的一部分。有什么方法吗?
答案 0 :(得分:2)
sed 's/\\\\ /+/';
\\\\
评估为shell级别的\\
,然后评估为sed中的文字\
。
答案 1 :(得分:2)
你想逃避斜线:
web=$(echo "$ext" | sed 's/\\ /_/g')
答案 2 :(得分:2)
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
标志来替换所有出现的空间,而不仅仅是第一个。修正如上。
答案 3 :(得分:0)
单引号是你的朋友 以下内容应与单引号args一起用于$ 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"