使用 sed 编辑引号内的值

Use sed to edit a value within quotes

x我有一个这样的文本:

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";一些其他东西

非常感谢,我可以使用

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

但是它用 newValue 代替了内容而不是前缀...

捕获组应该使用xId

经过编辑以展示棘手的部分,感谢您的评论

sed:

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

我正在使用两个捕获组:([^"]*") 在下一次打开 " 之前捕获 xId 之后的所有内容,包括它们。 ([^"]*)选择"之间的内容。

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

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

假设

会根据您的结构为您的字符串内容添加前缀
  • xld 不是
  • 之前没有 space 的第一个字段
  • 在您的字段名称
  • 之前的字符串中没有 xld "