我有一个以分号分隔的文件。
文件中的一个字段是以管道分隔的。
实施例
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实现这一目标?
答案 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
这匹配前三个字段,并将其替换为前两个字段和第三个字段中的第一个字段。