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

时间:2015-07-24 10:41:14

标签: linux unix awk sed

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

文件中的一个字段是以管道分隔的。

实施例

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实现这一目标?

3 个答案:

答案 0 :(得分:2)

sed 's/[|][^;]*//g' YourFile
  • 删除(包括)|[|]模式)之后的任何值,直到它不是;[^;]模式)为止并且每次出现(g选项)
  • 假设|只是一个分隔符,而不是字段值的一部分(比如字符串)

答案 1 :(得分:0)

一种方式:

$ 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
$

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/^(([^;]*;){2}[^|;]*)[^;]*/\1/' file

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