gpt4 book ai didi

bash - grep 到 sed,在字符串匹配之后追加,而不是在行尾

转载 作者:行者123 更新时间:2023-11-29 09:46:27 25 4
gpt4 key购买 nike

我有以下包含以下行的文本文件:

<test="123">
<test="456">
<test="789">

我的目标是让上述文本文件在上述数字后附加关键字“HELLO”,如下所示:

  <test="123.HELLO">
<test="456.HELLO">
<test="789.HELLO">

通过 grep 命令和 cut,我设法获取了引号之间的值。

grep -o "test=".* test.txt | cut -d \" -f2

我尝试在它上面使用 sed,这一行

grep -o "test=".* test.txt | cut -d \" -f2 | sed -i -- 's/$/.HELLO/' test.txt

然而,我设法得到的最接近的是一个“.HELLO”,它直接附加在该行的末尾(而不是在引号之间的数字之后)

<test="123">.HELLO 
<test="456">.HELLO
<test="789">.HELLO

如何修正我的 sed 语句来为我提供请求的行?

最佳答案

您可以在 sed 中使用组来完成。要创建新的输出,您可以这样做:

 sed 's/\(test="[^"]*\)"/\1.HELLO"/g' test.txt

要就地修改它,您可以使用 -i 开关:

 sed -i 's/\(test="[^"]*\)"/\1.HELLO"/g' test.txt

解释:

  • () 是一个组。您可以使用 \1 来引用它。在 sed 中我们必须转义括号:\(\)
  • [^"]* 匹配不是引号的所有内容。因此匹配将在引号之前停止
  • 在替换中,您必须手动添加引号,因为它在组之外。所以你可以在引号前加上一些东西。

关于bash - grep 到 sed,在字符串匹配之后追加,而不是在行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com