使用流编辑器 (sed) 获取逗号分隔行内的子字符串

Use Stream Editor (sed) to Obtain Substring within Comma-Delimited Lines

所以我今天大部分时间都在尝试使用 sed 在以下行中获取用户名。

nesomplefore,Aip1seshoh,female,Ms.,Siri,Rosberg,870 Maxwell Farm Road,Fredericksburg,VA,22408,,540-222-0054,3/24/48,Aries,Cartographer

我已经使用 grep 成功地完成了它,因为我设法从另一个 post 复制并粘贴到这里,但我没有使用 sed 的运气。

有人可以解释一下 grep 正则表达式以及如何使用 sed 做同样的事情吗?

grep -oP "^([^,]*\,){0}\K[^,]*"

我希望能够通过管道传输正则表达式的结果,以便动态添加大量用户。请不要让我参考此 link,因为我尝试按照 sed 和其他人的解释进行操作,但一点都不理解。

当然可以。如果我们将您的示例行放入名为 'test.txt' 的文件中,则以下工作正常:

sed -e 's/^\([^,]*\),.*//' test.txt

内容如下:

s - search/replace

/^\([^,,]*\),.*/ - 从行首搜索 (^) 为任意数量的非逗号字符 ([^,]*) 创建反向引用(转义括号) .关闭后参考标记外的 ,.* 捕获该行的其余部分。

// - 将匹配的字符串替换为存储的反向引用(用户名)

您没有告诉我们 "username" 在示例输入中出现的位置,也没有向我们展示您的预期输出,所以我不知道您想要哪个字段,但您想要的工具是 cut,不是 sed:

$ echo 'nesomplefore,Aip1seshoh,female' | cut -d, -f1
nesomplefore

$ echo 'nesomplefore,Aip1seshoh,female' | cut -d, -f2
Aip1seshoh

这听起来像是一项硬件作业,请在class中注意,因为我们不是您的导师。也不要使用特定的文件名和位置,因为它会带来安全问题……您将在 class 中了解到这一点。