regex - 我怎样才能让 sed 只匹配第一次出现的字符?

标签 regex linux sed

我正在使用 GNU Sed 4.2.1。我正在尝试替换下一行中的第二个字段(/etc/shadow 中的密码)。 Awk 不是一个选项。

username:P@s$w0rDh@$H:15986:0:365::::

我试过了

sed -i 's/\(^[a-z]*\):.*?:/\1:TEST:/'

但什么也没有。我尝试了很多变体,但出于某种原因,我无法让它只匹配那个字段。帮忙?

最佳答案

使用 [^:]* 匹配所有内容直到下一个 :

sed -i 's/^\([^:]*\):\([^:]*\):/\1:TEST:/'

关于regex - 我怎样才能让 sed 只匹配第一次出现的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323529/

相关文章:

php - 如何替换长文本中具有动态数字的所有特定字符串?

Java 正则表达式不工作 - 字符串分割

Javascript 正则表达式语法错误?

linux - 如何在 Cygwin 中配置 SwiRL- 语义角色标记器?

linux - 如何使用 755/644 和 apache 进行 sftp 上传和 git 推送 :apache rights/owner?

regex - 使用 sed 在带引号的字符串末尾添加一些内容

linux - 在 Linux 中如何检查 2 个不同的模式是否在连续的行中

c# - 检测单引号内的两个连续单引号

linux - 使用 'sed' shell 命令部分替换字符串

linux - 期望脚本+如果没有出现如何忽略字符串