繁体   English   中英

我如何才能只匹配首次出现的字符?

[英]How can I get sed to only match to the first occurrence of a character?

我正在使用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:/'

使用sed:

sed -i.bak 's/^\([^:]*:\)[^:]*\(.*\)$/\1foo\2/' file

使用awk,您可以执行以下操作:

awk -F: '{$2="foo"}1' OFS=: file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM