我的作业要求:
创建目录
~/UnixCourse/scriptAsst
。转两行版, 上面,将替换命令转换为shell脚本subst1
三个参数:要替换的字符串,用哪个字符串 将其替换为替换文件的名称。例如,
`~/UnixCourse/scriptAsst/subst1 foo bar myFile.txt`
应该{{1}}替换文件
foo
中出现的所有myFile.txt
, 原始文件为bar
。类似地,
myFile.txt.bak
应该删除(替换为空字符串)文件
`~/UnixCourse/scriptAsst/subst1 abc "" aardvark.dat`
中所有abc
出现的内容,并将原始文件保留为aardvark.dat
。
我想出的代码是:
aardvark.dat.bak
当我尝试跑步时:
#!/bin/bash
set p1 = "$1"
shift
set p2 = "$1"
shift
set p3 = "$*"
echo $p1
echo $p2
echo $p3
if grep "$p1" "$p3" > /dev/null; then
mv "$p3" "$p3.bak"
sed "s/$p1/$p2/g" "$p3.bak" > "$p3"
fi
我一直在:
./subst1 foo bar myFile.txt
请帮忙!!我做错了什么?
答案 0 :(得分:1)
这是你设置变量的方法:
p1="$1"
shift
p2="$1"
shift
p3="$1"
或在这种情况下简单地说:
p1="$1"; p2="$2"; p3="$3"
注意:
$1
。grep -q
,因此您无需重定向标准输出。答案 1 :(得分:1)
您实际上并不需要做任何事情。
sed -i.bak "s/$1/$2/g" "$3"
答案 2 :(得分:0)
或直接使用参数...
#!/bin/bash
echo $1
echo $2
echo $3
if grep "$1" "$3" > /dev/null; then
mv "$3" "$3.bak"
sed "s/$1/$2/g" "$3.bak" > "$3"
fi