【发布时间】:2016-05-20 08:19:22
【问题描述】:
我确信必须有一个简单的答案,但我无法解决这个问题,而且我在这里找到的类似问题并没有让我完全理解(尽管他们有所帮助)。
我在 Windows 中有一个 TestFile.txt 文本文件,每行有不同数量的 OU,如下所示:
"CN=John Doe,OU=Milk,OU=Dairy,OU=Food,DC=company,DC=com"
"CN=Jane Doe,OU=Red,OU=Apples,OU=Fruit,OU=Food,DC=company,DC=com"
"CN=Pete Doe,OU=Forks,OU=Cutlery,OU=NotFood,DC=company,DC=com"
"CN=Fred Doe,OU=Spoons,OU=Cutlery,OU=NotFood,DC=company,DC=com"
"CN=Alex Doe,OU=Biscuits,OU=Chocolate,OU=Candy,OU=Food,DC=company,DC=com"
"CN=Peta Doe,OU=Buttons,OU=Chocolate,OU=Candy,OU=Food,DC=company,DC=com"
我想剥离无关数据,只剩下最后两个 OU,如下所示:
OU=Dairy,OU=Food
OU=Fruit,OU=Food
OU=Cutlery,OU=NotFood
OU=Cutlery,OU=NotFood
OU=Candy,OU=Food
OU=Candy,OU=Food
我已经使用 Windows 端口的 sed 轻松地删除了每一行的开头和结尾:
sed -e "s/[^,]*,//" -e "s/,DC\=.*//" TestFile.txt
...这给了我:
OU=Milk,OU=Dairy,OU=Food
OU=Red,OU=Apples,OU=Fruit,OU=Food
OU=Forks,OU=Cutlery,OU=NotFood
OU=Spoons,OU=Cutlery,OU=NotFood
OU=Biscuits,OU=Chocolate,OU=Candy,OU=Food
OU=Buttons,OU=Chocolate,OU=Candy,OU=Food
所以现在我只需要隔离每行的最后两个 OU 并忽略其他所有内容。如果每行有固定数量的 OU,这会大大简化事情,但是如何创建一个 sed 表达式来适应不同数量的 OU?
【问题讨论】:
-
将 awk 添加到标签中,并在可能的情况下刷新问题。用 awk 很简单
-
啊,你的意思是:gawk -F, "{ print $(NF-1), $NF; }" TestFile.txt ??
-
快速学习者看起来不错
标签: regex string windows awk sed