gpt4 book ai didi

linux - sed 在多个空格的情况下搜索和替换

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:27 28 4
gpt4 key购买 nike

我有一个包含以下内容的文件,现在我需要通过搜索“enable-cache passwd”将 no 替换为 yes,我无法简单地使用“passwd”进行搜索,因为该文件可能还有一些其他条目。

#       enable-cache            <service> <yes|no>
enable-cache passwd no
enable-cache group no
enable-cache hosts yes
enable-cache services yes
enable-cache netgroup no

最佳答案

有多种方法可以做到这一点。如果您认为可移植性不是问题,则可以使用比可移植性有问题时更短的符号。

可移植

sed -e '/^[[:space:]]*enable-cache[[:space:]]\{1,\}passwd[[:space:]]\{1,\}no[[:space:]]*$/ {
s/no[[:space:]]*$/yes/
}'

可怕的第一行在行开头查找零个或多个类似空格的字符(空格、制表符),然后是 enable-cache、一个或多个类似空格的字符、单词 passwd、一个或多个类似空格的字符、单词 no 以及零个或多个类似空格的字符以及行尾。这与有趣的线条相匹配。第二行包含一个更简单的模式,用 yes 替换 no 和任何尾随空格(如果有尾随空格,则删除 - 无论如何你都不想要它)。这可以更简单,因为精心设计的表达式确保只找到有趣的行。大括号只是将事物分组;如果您不介意长行,则可以在没有大括号的情况下在一行上完成所有操作。

GNU sed

GNU sed -r 选项提供了一些简写,特别是 \s 表示 [[:space:]]+ 表示 \{1,\},这允许将其压缩为:

sed -r -e '/^\s*enable-cache\s+passwd\s+no\s*$/ s/no\s*$/yes/'

关于linux - sed 在多个空格的情况下搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910837/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com