使用流编辑器(sed)在逗号分隔的行中获取子串

时间:2016-02-14 01:21:09

标签: regex awk sed grep delimiter

所以今天我已经尝试使用sed获取以下行中的用户名。

  

nesomplefore,Aip1seshoh,女,女士,Siri,Rosberg,870 Maxwell Farm Road,Fredericksburg,VA,22408,,540-222-0054,3 / 24/48,白羊座,制图师

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

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

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

我希望能够管道正则表达式的结果,以便动态添加大量用户。请不要将我推荐给link,因为我尝试按照sed和其他人的说明进行操作,并且不了解其中的任何内容。

3 个答案:

答案 0 :(得分:1)

不确定。如果我们将您的样本行放入名为'test.txt'的文件中,则以下工作正常:

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

以下是它的说法:

s - 搜索/替换

/^\([^,,]*\),.*/ - 从行的开头(^)搜索,为任何非逗号([^,]*)字符创建后向引用(转义括号)。收尾参考标记之外的,.*捕获线的其余部分。

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

答案 1 :(得分:0)

你不能告诉我们"用户名"出现在您的示例输入中,也没有向我们展示您的预期输出,因此我不知道您想要哪个字段,但您想要的工具是cut,而不是sed

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

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

答案 2 :(得分:0)

这听起来像是一个新的作业,请在课堂上注意,因为我们不是你的导师。也不要使用特定的文件名和位置,因为它会带来安全问题......您将在课堂上学习。