一尘不染

如何检查sed是否已更改文件

linux

我试图找到一种聪明的方法来找出传递给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

上面的代码有点贵,我希望能够在这里使用一些技巧。


阅读 470

收藏
2020-06-02

共1个答案

一尘不染

您可以awk改用:

awk '$0 ~ p { gsub(p, r); t=1} 1 END{ exit (!t) }' p="$pattern" r="$repl

我忽略了该-i功能:您可以根据需要使用Shell做重定向。

叹。下面有许多评论要求提供有关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”在每种情况下是否相同。两个块中任何类似的代码都应进行相应的重构。

2020-06-02