使用sed的白色空间模式匹配

时间:2013-07-30 20:04:44

标签: bash sed pattern-matching

我正在编写一个bash脚本来替换包含空格的行中的模式。 文字看起来像这样 - property name =“abcd”value =“1234”,该值在文件中多次更改,如value = 3456和value = 3689。只有包含name =“abcd”和value =的东西才能被替换。

还有其他一些实例,其中abcd和value是分别调用的,不应该被替换。

我想在替换之前匹配标准name =“abcd”和value。像

这样的东西
sed -i '/name="abcd" value=/c\property name="abcd" value="set"' filename

如何解析“abcd”和值之间的空格,以便sed可以将其识别为单个字符串?

输入:

`property name="abcd" value="1234"`
`property name="abcd" value="73845"`
`property name="abcd" value="8276"`
`property name="qwerty" value="1234"`
`blah blah ${abcd} blah`

期望的输出:

`property name="abcd" value="set"`
`property name="abcd" value="set"`
`property name="abcd" value="set"`
`property name="qwerty" value="1234"`
`blah blah ${abcd} blah`

3 个答案:

答案 0 :(得分:0)

如果我理解正确,你在单独的行上有name =“blah”value =“blah”,并希望删除\ n

    sed ':a;N;$!ba;s/\n/ /g' 

会根据How can I replace a newline (\n) using sed?

执行您想要的操作

答案 1 :(得分:0)

经过一些试验和错误后,我找到了解决方案

`sed -i "/V.prop.*value=/c\ <property name=\\\"V.prop\\\" value=\\\"set\\\"/>" filename` 

。*填充同一行中的两个搜索模式。 \\用于转义双引号。

答案 2 :(得分:0)

试试这个:

sed -i -r 's/(property name="abcd" value=)"[0-9]+"/\1"set"/' filename