我有一个用分号分隔的文件。
并且文件中的一个字段是用竖线分隔的。
举例说明。
field-1;field-2;value-1|value-2|value-3;field-4;field-5在这里,field-3只不过是用管道线分隔的值。
现在我的要求是,如果field-3中有多个值,
我只需要保留第一个值。丢弃该字段中第一个管道之后的所有内容。
也就是说,我只想在field-3中保留第一个值,如下所示
field-1;field-2;value-1;field-4;field-5您能告诉我如何使用sed/awk实现这一点吗?
发布于 2015-07-24 19:01:49
sed 's/[|][^;]*//g' YourFile| )( [|]模式)之后的任何值,直到它不是代码( ; )( [^;]模式),并且对于每次出现( g code |只是一个分隔符,而不是字段值的一部分(就像在字符串中)<;>F212g>
发布于 2015-07-24 19:03:22
一种方法:
$ 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
$发布于 2015-07-24 20:02:30
这可能适用于您(GNU sed):
sed -r 's/^(([^;]*;){2}[^|;]*)[^;]*/\1/' file这匹配前三个字段,并将其替换为前两个字段和第三个字段中的第一个值。
https://stackoverflow.com/questions/31608434
复制相似问题