家庭作业 - 不要只是给我一个答案,但我已经被困在这几天了。这也解释了我为什么不能使用csh,这当然会加剧这个问题。
shell脚本需要在文件中搜索字符串并将其替换为新字符串,如果找到该字符串并且文件已被更改,则创建备份文件。很简单,对吧?
这是我的代码。
#!/bin/csh
set currentWord=$1
set newWord=$2
set fileName=$3
#sed -i.bak -e "s/$1/$2/g" $3
if (grep -q $1 $3) then
sed -i.bak -e "s/$1/$2/g" $3
else
echo "The string is not found."
endif
我遇到的问题是它不应该"触摸"除非找到该字符串,否则该文件。我一直在做的方式是以任何一种方式创建文件,有时它们最终会成为相同的文件。我也尝试过只使用一个sed命令,但最接近解决方案的是将sed命令用于if if else。现在我得到一个" if表达式语法"错误 - 这让我觉得我根本不能使用grep,需要重新格式化或使用别的东西。
答案 0 :(得分:0)
您需要检查grep
的退出状态。有几种方法可以做到这一点。
你要么:
调用grep
,然后检查特殊变量$status
,就像在
#!/bin/csh
set currentWord=$1
set newWord=$2
set fileName=$3
grep -q $currentWord $fileName
if !($status) then
sed -i.bak -e "s/$currentWord/$newWord/g" $fileName
else
echo "The string is not found."
endif
或者,由于此处不需要$status
的实际价值,只需使用terser表格
#!/bin/csh
set currentWord=$1
set newWord=$2
set fileName=$3
if { grep -q $currentWord $fileName } then
sed -i.bak -e "s/$currentWord/$newWord/g" $fileName
else
echo "The string is not found."
endif
第二个是我最喜欢的。