替换多个文件中的一行复杂文本

替换多个文件中的一行复杂文本

我有一堆Linux在各个子文件夹中命名的文件,其中全线

DSY_OS_Release=`lsb_release --short --id |sed 's/ //g'`

需要替换为

DSY_OS_Release="RedHatEnterpriseWorkstation"

如何使用命令行实现此目的?

我知道这听起来像是一个重复的问题,但我找不到任何适用于我相当复杂的字符串的答案。

答案1

如果不需要匹配整行,那么只需使用

sed 's/^DSY_OS_Release=.*/DSY_OS_Release="RedHatEnterpriseWorkstation"/'

根据您的sed实现,您可以使用sed -i '...' file,或者您可能必须重定向到新文件并随后替换原始文件。

至于如何在一组文件上运行它:如果所有文件都匹配特定模式,例如*.config, then (假设 GNU sed):

find /some/path -type f -name '*.config' \
    -exec sed -i '...as above...' {} \;

相关内容