regex - 了解 shell 中的正则表达式

标签 regex shell sed

我在 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/

相关文章:

Python正则表达式匹配任意数量的不紧随句点的数字

java - 排除 Java 正则表达式中带有正斜杠的单词

c - 执行不工作

Bash set +x 没有被打印

linux - 使用 Sed 从日志文件中提取 XML 内容并将每个结果转储到不同的文件

linux - bash 脚本删除一些字符

C# 使用正则表达式提取单词

javascript - 正则表达式排除特定位

json - 使用 BASH 将 CSV 转换为 JSON

linux - 如何从另一个文件A中删除文件B上出现的行?