我用下面的sed语法,以更换时区字符串#timezone的sed +替换字符串/字和字符串后忽略空间
实际上sed命令替换它, 但在时区字符串后情况下,我们有一个或更大的空间,然后SED不是取代它
我的问题是我需要的SED语法更改,以取代在这两种情况下的时区字符串
- 时区字符串后,我们没有任何空间
时区字符串后,我们一有空间或更多
sed -i '/timezone$/s/timezone/#timezone/' file
我用下面的sed语法,以更换时区字符串#timezone的sed +替换字符串/字和字符串后忽略空间
实际上sed命令替换它, 但在时区字符串后情况下,我们有一个或更大的空间,然后SED不是取代它
我的问题是我需要的SED语法更改,以取代在这两种情况下的时区字符串
时区字符串后,我们一有空间或更多
sed -i '/timezone$/s/timezone/#timezone/' file
你可以试试:
sed -i.bak -r 's/timezone ?$/#timezone/' file
你需要一个空间后添加?
,这将使空间可选。你也必须添加-r
选项才能让sed理解扩展正则表达式。
此外,您还没有指定-i
选项后的备份扩展名。
@David thx condaddict为伟大的解决方案,任何我不需要备份,因为它的小变化,但它很好从你学到的新东西 - : ) – david
'?'只有零个空格或一个空格,问题是“一个或多个空格”。顺便说一句,可以在GNU sed BREs中使用'\?'('-r'表示GNU sed)。 –
陈述你的两个案例为一个,你想要替换'时区'后跟零个或多个空格,当它在行尾。这应该是这样的:
sed -i 's/timezone *$/#timezone/' file
这应该是一个理想的解决方案,为您的案件。
sed 's/timezone *$\|timezone/#&/' INPUT_FILE
可以安全地假设'时区'每行只出现一次吗?正如所写的,您检查该行以'timezone'结尾,然后用'#timezone'替换第一个出现的'timezone'。这似乎有点奇怪(但完全有可能)。 –
是的,备注 - 时区是一个函数 - 所以它只出现在每行一个 – david