首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在unix中处理同一文件中的嵌套分隔符

如何在unix中处理同一文件中的嵌套分隔符
EN

Stack Overflow用户
提问于 2015-07-24 18:41:14
回答 3查看 55关注 0票数 0

我有一个用分号分隔的文件。

并且文件中的一个字段是用竖线分隔的。

举例说明。

代码语言:javascript
复制
field-1;field-2;value-1|value-2|value-3;field-4;field-5

在这里,field-3只不过是用管道线分隔的值。

现在我的要求是,如果field-3中有多个值,

我只需要保留第一个值。丢弃该字段中第一个管道之后的所有内容。

也就是说,我只想在field-3中保留第一个值,如下所示

代码语言:javascript
复制
field-1;field-2;value-1;field-4;field-5

您能告诉我如何使用sed/awk实现这一点吗?

EN

回答 3

Stack Overflow用户

发布于 2015-07-24 19:01:49

代码语言:javascript
复制
sed 's/[|][^;]*//g' YourFile

  • 它删除(包括)代码( | )( [|]模式)之后的任何值,直到它不是代码( ; )( [^;]模式),并且对于每次出现( g code |只是一个分隔符,而不是字段值的一部分(就像在字符串中)

<;>F212g>

票数 2
EN

Stack Overflow用户

发布于 2015-07-24 19:03:22

一种方法:

代码语言:javascript
复制
$ x='field-1;field-2;value-1|value-2|value-3;field-4;field-5'
$ echo $x | awk -F";" '{gsub(/\|.*/,"",$3);}1' OFS=";"
field-1;field-2;value-1;field-4;field-5
$
票数 0
EN

Stack Overflow用户

发布于 2015-07-24 20:02:30

这可能适用于您(GNU sed):

代码语言:javascript
复制
sed -r 's/^(([^;]*;){2}[^|;]*)[^;]*/\1/' file

这匹配前三个字段,并将其替换为前两个字段和第三个字段中的第一个值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31608434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档