我试图找到一种聪明的方法来找出传递给sed的文件是否已成功更改。
基本上,我想知道文件是否已更改,而不必查看文件修改日期。
我之所以需要这样做,是因为如果sed成功替换了模式,我需要做一些额外的事情。
我目前有:
grep -q $pattern $filename if [ $? -eq 0 ] then sed -i s:$pattern:$new_pattern: $filename # DO SOME OTHER STUFF HERE else # DO SOME OTHER STUFF HERE fi
上面的代码有点贵,我希望能够在这里使用一些技巧。
您可以awk改用:
awk
awk '$0 ~ p { gsub(p, r); t=1} 1 END{ exit (!t) }' p="$pattern" r="$repl”
awk '$0 ~ p { gsub(p, r); t=1} 1 END{ exit (!t) }' p="$pattern" r="$repl
我忽略了该-i功能:您可以根据需要使用Shell做重定向。
-i
叹。下面有许多评论要求提供有关shell的基础教程。您可以按以下方式使用上面的命令:
if awk '$0 ~ p { gsub(p, r); t=1} 1 END{ exit (!t) }' \ p="$pattern" r="$repl" "$filename" > "${filename}.new"; then cat "${filename}.new" > "${filename}" # DO SOME OTHER STUFF HERE else # DO SOME OTHER STUFF HERE fi
我不清楚“ DO SOME OTHER STUFF HERE”在每种情况下是否相同。两个块中任何类似的代码都应进行相应的重构。