【问题标题】:White space pattern matching using sed使用 sed 进行空格模式匹配
【发布时间】:2013-07-31 03:36:23
【问题描述】:

我正在编写一个 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`

【问题讨论】:

  • 换句话说,您想用blank 替换1234 和其他人?
  • 我不太明白您的问题,但您应该可能使用 XML 解析器。 . .
  • 是的,将所有符合条件的实例的值替换为字符串空白
  • 所有行的唯一共同模式是 name="abcd" 值。我想匹配该模式并进行换行
  • 请添加输入示例和所需输出。

标签: bash sed pattern-matching


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      会做你想要从How can I replace a newline (\n) using sed?获取的东西

      【讨论】:

      • 不,每行的值都不同。我希望将其替换为字符串“blah”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2014-06-17
      • 1970-01-01
      相关资源
      最近更新 更多