如何在bash中用sed命令替换符号间
因此,我最近请求了一个sed命令的帮助,以替换符号第一次和第二次出现之间的文本。这是指向该问题的链接: 现在我需要类似的东西,在第二个和第三个外观之间替换,第三个替换到行尾 假设我有这个文本文件:如何在bash中用sed命令替换符号间,bash,shell,unix,sed,Bash,Shell,Unix,Sed,因此,我最近请求了一个sed命令的帮助,以替换符号第一次和第二次出现之间的文本。这是指向该问题的链接: 现在我需要类似的东西,在第二个和第三个外观之间替换,第三个替换到行尾 假设我有这个文本文件: aaaa:bbbb:cccc:dddd eeee:ffff:gggg:hhhh iiii:jjjj:kkkk:llll 这一行所做的是在第一行和第二行之间进行替换:在给定的行中,问题是命令应该如何在第二行和第三行之间进行替换:,以及第三行到行的末尾 例如,第三行中第二行和第三行之间替换的输出如下所示
aaaa:bbbb:cccc:dddd
eeee:ffff:gggg:hhhh
iiii:jjjj:kkkk:llll
这一行所做的是在第一行和第二行之间进行替换:在给定的行中,问题是命令应该如何在第二行和第三行之间进行替换:,以及第三行到行的末尾
例如,第三行中第二行和第三行之间替换的输出如下所示:
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
你可以用
sed -E "${lineNumber} s/^(([^:]*:){2})[^:]*/\1${passwd}/"
见:
s='aaaa:bbbb:cccc:dddd
eeee:ffff:gggg:hhhh
iiii:jjjj:KKK:lll'
passwd='newpass'
行号=2
sed-E${lineNumber}s/^[^:::*:{2}[^:::*/\1${passwd}/您可以使用
sed -E "${lineNumber} s/^(([^:]*:){2})[^:]*/\1${passwd}/"
见:
s='aaaa:bbbb:cccc:dddd
eeee:ffff:gggg:hhhh
iiii:jjjj:KKK:lll'
passwd='newpass'
行号=2
sed-E${lineNumber}s/^[^::::*:{2}[^::::*/\1${passwd}/您可以始终使用ruby,它可以完成sed/awk/grep可以完成和无法完成的任务,因此您不必随身携带不同的工具。在本例中,您可以使用:
ruby -pe '$_.sub!(/(:[^:]*:)([^:]*)/, "\\1XXX")'
这意味着要匹配[a]一个冒号、任何不包含冒号的冒号、另一个冒号和[b]任何不包含冒号的冒号,然后放回[a]\\1并用XXX替换[b],XXX应该是一个密码。您可以始终使用ruby,它可以做sed/awk/grep可以做的事和他们不能做的事,所以你不必随身携带不同的工具。在本例中,您可以使用:
ruby -pe '$_.sub!(/(:[^:]*:)([^:]*)/, "\\1XXX")'
这意味着匹配[a]一个冒号、任何不包含冒号的冒号、另一个冒号和[b]任何不包含冒号的冒号,然后放回[a]\\1并用XXX替换[b],XXX应该是一个密码。这可能适用于您的GNU:
sed ${lineNumber}'s/[^:]*/'${passwd}'/3' file
将第三次出现的非冒号替换为$lineNumber行上的变量$passwd。这可能适用于GNU-sed:
sed ${lineNumber}'s/[^:]*/'${passwd}'/3' file
将第三次出现的非冒号替换为$lineNumber行中的变量$passwd。您能解释一下为什么您没有接受上一个问题的任何答案吗?请您将问题中预期输出的示例发布在代码标签中,以使问题更清楚。上一个问题中给出的答案是有用且有效,但是现在我需要一个不同的命令来获得不同的输出。这是我在bash的第一年,所以我是一个初学者,不能很容易地修改代码。你能解释一下为什么你没有接受上一个问题的任何答案吗?你能不能在代码标签中发布你问题中预期输出的示例,以使问题更清楚。上一个问题中给出的答案很有用,也很有效,但现在我知道了需要一个不同的命令为不同的输出我正在寻找。这是我使用bash的第一年,所以我是初学者,不能很容易地修改代码。