2011-11-24 73 views
1

我用下面的sed语法,以更换时区字符串#timezone的sed +替换字符串/字和字符串后忽略空间

实际上sed命令替换它, 但在时区字符串后情况下,我们有一个或更大的空间,然后SED不是取代它

我的问题是我需要的SED语法更改,以取代在这两种情况下的时区字符串

  1. 时区字符串后,我们没有任何空间
  2. 时区字符串后,我们一有空间或更多

    sed -i '/timezone$/s/timezone/#timezone/' file 
    
+0

可以安全地假设'时区'每行只出现一次吗?正如所写的,您检查该行以'timezone'结尾,然后用'#timezone'替换第一个出现的'timezone'。这似乎有点奇怪(但完全有可能)。 –

+0

是的,备注 - 时区是一个函数 - 所以它只出现在每行一个 – david

回答

3

你可以试试:

sed -i.bak -r 's/timezone ?$/#timezone/' file 

你需要一个空间后添加?,这将使空间可选。你也必须添加-r选项才能让sed理解扩展正则表达式。

此外,您还没有指定-i选项后的备份扩展名。

+0

@David thx condaddict为伟大的解决方案,任何我不需要备份,因为它的小变化,但它很好从你学到的新东西 - : ) – david

+0

'?'只有零个空格或一个空格,问题是“一个或多个空格”。顺便说一句,可以在GNU sed BREs中使用'\?'('-r'表示GNU sed)。 –

0

陈述你的两个案例为一个,你想要替换'时区'后跟零个或多个空格,当它在行尾。这应该是这样的:

sed -i 's/timezone *$/#timezone/' file 
0

这应该是一个理想的解决方案,为您的案件。

sed 's/timezone *$\|timezone/#&/' INPUT_FILE