sed用空格查找/替换行

时间:2013-05-21 23:26:05

标签: shell sed

我正在编写一个shell脚本,它将查找并替换一行以禁用nscd中的密码缓存。问题是,在参数之前和之间存在大量的空白区域,我似乎无法通过我对正则表达式的有限知识找到方法来忽略空格并将no更改为yes。

这是配置文件中显示的行。为了防止它显示不正确,启用缓存前有8个空格,之后有12个空格,没有前10个空格。

    enable-cache            passwd          no

我基本上只需要将该行的“否”更改为“是”。有人有什么想法吗?

谢谢

格雷格

2 个答案:

答案 0 :(得分:1)

显示完整的用法示例(尽管在命令行而不是从文件中给出输入):

$ sed -r -e \
     's/^([[:space:]]*enable-cache[[:space:]]+passwd[[:space:]]+)no([[:space:]]*)$/\1yes\2/' \
     <input-file >output-file \
     && mv output-file input-file

要就地执行此操作,您需要使用edex(两者,与sed -i不同,是POSIX指定的工具):

$ printf '%s\n' \
     '%s/\([[:space:]]*enable-cache[[:space:]]\+passwd[[:space:]]\+\)no[[:space:]]*/\1yes/' \
     'wq' \
    | ex file-to-modify -s -

答案 1 :(得分:0)

匹配并捕获从enable-cache开始的部分,最多no,并匹配no。将所有匹配的零件替换为捕获的零件yes

sed 's/\(enable-cache[ ]*passwd[ ]*\)no/\1yes/' input
相关问题