处理shell脚本的文件名中的空格

时间:2013-12-08 18:37:09

标签: shell sed filenames

我有一个shell脚本,它接受3个参数并根据这些参数执行文本替换。第一个参数是要替换的文本,第二个是要替换它的文本,第三个是文件名。除非文件名有空格,否则该脚本有效。我不知道如何让sed解析文件名,而不是将其分成两个文件。该脚本的当前版本如下:

#! /bin/sh
oldString=$1
newString=$2
file=$3

oldStringFixed=$( echo "$oldString" | sed -e "s/\("\''[]*^+\.$[-]\)/\\\1/g' )

sed -e "s/$oldStringFixed/$newString/g" "$file"> newfile.updated
mv newfile.updated "$file"

调用如:

./script replacethis withthis on this.txt

名称on this.txt分为两部分。任何人都可以解释如何处理名字中有空格的文件吗?

3 个答案:

答案 0 :(得分:1)

在命令行中引用带空格的文件名,就像在脚本中一样:

./script replacethis withthis "on this.txt"

您甚至可以为oldStringnewString指定多个字词:

./script "replace this" "with that" "on this.txt"

答案 1 :(得分:0)

主要问题在于调用,而不是脚本。您需要将名称括在引号中,以便shell将其视为单个参数:

./script replacethis withthis "on this.txt"

答案 2 :(得分:0)

我无法测试这个,因为我在周末无法访问bash,但请尝试

oldString=$1
newString=$2
shift 2
file="$*"
echo $*