我有一个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
分为两部分。任何人都可以解释如何处理名字中有空格的文件吗?
答案 0 :(得分:1)
在命令行中引用带空格的文件名,就像在脚本中一样:
./script replacethis withthis "on this.txt"
您甚至可以为oldString
和newString
指定多个字词:
./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 $*