使用流编辑器 (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 中了解到这一点。
所以我今天大部分时间都在尝试使用 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 中了解到这一点。