我在 shell 脚本中遇到了单一分组概念。
cat employee.txt
101,John Doe,CEO
我正在练习 SED 替代命令并遇到以下示例。
sed 's/\([^,]*\).*/\1/g' employee.txt
上面的表达式匹配到第一个逗号之前的字符串。
我无法理解这如何与第一个逗号匹配。
以下是我的理解
s - substitute command
/ delimiter
\ escape character for (
( opening braces for grouping
^ beginning of the line - anchor
[^,] - i am confused in this , is it negate of comma or mean something else?
为什么使用 *
和 .*
来匹配第一个逗号之前的字符串?
最佳答案
^
匹配字符类 []
之外的行开头。在字符类的开头,表示否定。
因此,它表示:非逗号 ([^,]
) 重复零次或多次 (*
),后跟任何内容 (.*)。字符串的匹配部分被逗号之前的部分替换,因此它会删除从第一个逗号开始的所有内容。
关于regex - 了解 shell 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28580085/