使用sed编辑引号内的值

时间:2015-06-11 12:04:32

标签: regex bash replace sed double-quotes

xI有这种形式的文本:

foo1   bar1   xId "myId1";yId "something"
foo2   bar2   xId "myId2";yId "something"
foo2   bar2   yId "something";xId "myId3"

如何使用sed编辑myId字段?我想在它之前附加一个值,如下所示:

foo1   bar1   xId "prefix_myId1";yId "something";
foo2   bar2   xId "prefix_myId2";yId "something";
foo2   bar2   yId "something";xId "prefix_myId2";

我不能使用awk,因为xId并不总是在我的文件中的同一个地方。但是,保证该行采用以下格式: someStuff xId" myContent&#34 ;; someOtherStuff

非常感谢,我可以使用

sed 's/\(.*xId \)[^ ]*\(;.*\)/ a \1"newValue"\2/'

但它用newValue替换内容而不是为它添加前缀...

捕获组应该使用xId

编辑显示部分内容,感谢您的评论

2 个答案:

答案 0 :(得分:2)

sed 's/\([[:space:];]xId[[:space:]]\{1,\}"\)/\1prefix_/' YourFile
假设

将根据您的结构为字符串内容添加前缀

  • xld不是
  • 之前没有空格的第一个字段
  • 字段名称前面的字符串中没有xld "

答案 1 :(得分:1)

使用sed

 sed -r 's/(xId\s*[^"]*")([^"]*)/\1prefix_\2/' input.txt

我使用了两个捕获组:([^"]*")捕获xId之后的所有内容,包括它们。 "选择([^"]*)之间的内容。

在替换模式中,我重新组合组并注入术语"