0

我正在编写一个 bash 脚本来替换包含空格的行中的模式。文本看起来像这样 - property name="abcd" value="1234" 并且值在文件中多次更改,例如 value=3456 和 value=3689。只有包含 name="abcd" 和 value=something 的行应该被替换。

在其他情况下,abcd 和 value 被单独调用,不应被替换。

我想在替换之前同时匹配标准 name="abcd" 和值。就像是

sed -i '/name="abcd" value=/c\property name="abcd" value="set"' filename

如何解决“abcd”和 value 之间的空格,以便 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`
4

3 回答 3

0

尝试这个:

sed -i -r 's/(property name="abcd" value=)"[0-9]+"/\1"set"/' filename
于 2013-07-31T18:32:46.680 回答
0

如果我理解正确,您在单独的行上有 name="blah" value="blah",并且只想删除 \n

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

会做你想做的事,我如何使用 sed 替换换行符 (\n)?

于 2013-07-30T20:16:31.143 回答
0

经过几次试验和错误,我找到了解决方案

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

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

于 2013-07-31T15:26:55.120 回答