【问题标题】:How to replace between symbols with sed command in bash如何在bash中用sed命令替换符号
【发布时间】:2021-02-01 15:37:21
【问题描述】:

因此,我最近向 sed 命令寻求帮助,用于替换符号的第一次和第二次出现之间的文本。这是该问题的链接:How to replace text in a specific line between first appearence of a symbol and second appearence of it

现在我需要类似的东西,在第二次和第三次出现之间替换,第三次到行尾

假设我有这个文本文件:

aaaa:bbbb:cccc:dddd
eeee:ffff:gggg:hhhh
iiii:jjjj:kkkk:llll
sed "${lineNumber}s/:[^:]*/:${passwd}/" users.txt

此行的作用是替换给定行中的第一个和第二个“:”,所以问题是该命令应该如何替换第二个和第三个“:”,以及第三个到行尾。

因此,例如,用“####”替换第三行中的第二个和第三个的输出将如下所示:

aaaa:bbbb:cccc:dddd
eeee:ffff:gggg:hhhh
iiii:jjjj:kkkk:####

和代码

sed "${lineNumber}s/:[^:]*/:${passwd}/" users.txt
                    ^^^^^^ I think that is what should be replaced

【问题讨论】:

  • 你能解释一下为什么你没有接受上一个问题的任何答案吗?
  • 能否请您在代码标签中的问题中发布预期输出示例,以使问题更清晰。
  • 上一个问题中给出的答案很有用并且有效,但现在我需要一个不同的命令来处理我正在寻找的不同输出。这是我使用 bash 的第一年,所以我是初学者,不能很容易地修改代码。

标签: bash shell unix sed


【解决方案1】:

你可以使用

sed -E "${lineNumber} s/^(([^:]*:){2})[^:]*/\1${passwd}/"

online sed demo

s='aaaa:bbbb:cccc:dddd
eeee:ffff:gggg:hhhh
iiii:jjjj:kkkk:llll'
passwd='newpass'
lineNumber=2
sed -E "${lineNumber} s/^(([^:]*:){2})[^:]*/\1${passwd}/" <<< "$s"

输出(见第二行第二个和第三个冒号之间的文本):

aaaa:bbbb:cccc:dddd
eeee:ffff:newpass:hhhh
iiii:jjjj:kkkk:llll

详情

  • ^ - 字符串开头
  • (([^:]*:){2}) - 第 1 组(此值使用正则表达式替换模式中的 \1 占位符引用):出现两次除 : 之外的任何字符,然后是 :
  • [^:]* - 除了: 之外的零个或多个字符。

请注意,{2} 是一个范围量词,它与修改后的模式匹配指定的次数。如果将其更改为{3},它将在第三次出现: 字符后替换。

【讨论】:

    【解决方案2】:

    这可能对你有用(GNU sed):

    sed ${lineNumber}'s/[^:]*/'${passwd}'/3' file
    

    在编号为$lineNumber 的行上用变量$passwd 替换第三次出现的非冒号。

    【讨论】:

      【解决方案3】:

      您始终可以使用 ruby​​,它可以做 sed/awk/grep 可以做和不能做的事情,因此您不必随身携带不同的工具。在本例中,您可以使用:

      ruby -pe '$_.sub!(/(:[^:]*:)([^:]*)/, "\\1XXX")'
      

      表示匹配[a]“一个冒号,任何不包含冒号的东西,另一个冒号”和[b]“任何不包含冒号的东西”,并放回[a](\\1)并替换[b ] 加上 XXX,这应该是一个密码。

      【讨论】:

        猜你喜欢
        • 2017-12-05
        • 2010-11-29
        • 1970-01-01
        • 2021-08-12
        • 2023-01-30
        • 2019-07-12
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多