sed如何替换“\”(反斜杠+空格)?

时间:2011-09-12 21:13:19

标签: sed substitution

在bash脚本中,带有空格的文件显示为"File\ with\ spaces.txt",我想用_+替换这些带斜线的空格。

我怎么能告诉sed这样做?我没有成功使用;

$1=~/File\ with\ spaces.txt
ext=$1
web=$(echo "$ext" | sed 's/\ /+/')

如果有比sed更好的方法,我愿意接受建议。

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

4 个答案:

答案 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"