这个3.sh读取第一个参数中指定的文件的内容,并将第二个参数中指定的所有单词替换为 second last 参数。 最后参数中指定的单词。
$cat file.txt
Hello NZ! How r u? Hey NZ! How r u?
$./3.sh file.txt NZ Hey Baby
Hello Baby! How r u? Baby Baby! How r u?
以下是我的代码:
#!/bin/bash
list=($1 $2 $3 $4 $5 $6 $7 $8 $9)
str="`cat ${list[0]}`"
for ((i=1; i<$#-1; i++))
do
str="${str//${list[i]}/${list[i+1]}"
done
echo $str > $1
答案 0 :(得分:1)
正如评论者指出的那样,你只是错过了那里的结束}
,所以快速修复是:
str="${str//${list[i]}/${list[i+1]}}"
但是你可以改写这个更好的,就像这样:
#!/bin/bash
file=$1; shift
replacement=$1; shift
str=$(cat "$file")
for pattern; do
str=${str//$pattern/$replacement}
done
echo "$str" > "$file"
这改变了这种新模式的用法:
./script.sh FILE REPLACEMENT PATTERN1 PATTERN2 PATTERN3 ...
但我认为这是值得的,因为逻辑更清晰,更简单。
顺便说一下,这个版本还修复了你可能遇到的其他潜在问题,例如文件名中有空格,或者你正在重写的文本文件中的空格序列。