Linux 如何在unix中处理同一文件中的嵌套分隔符
我有一个分号分隔的文件 文件中的一个字段是管道分隔的 例如Linux 如何在unix中处理同一文件中的嵌套分隔符,linux,unix,awk,sed,Linux,Unix,Awk,Sed,我有一个分号分隔的文件 文件中的一个字段是管道分隔的 例如 field-1;field-2;value-1|value-2|value-3;field-4;field-5 这里的field-3只是管道分隔值 现在我的要求是,如果字段-3中有多个值 我只需要保留第一个值。丢弃该字段中第一个管道之后的任何内容 i、 例如,我只想在字段-3中保留第一个值,如下所示 field-1;field-2;value-1;field-4;field-5 您能告诉我如何使用sed/awk实现这一点吗 sed
field-1;field-2;value-1|value-2|value-3;field-4;field-5
这里的field-3
只是管道分隔值
现在我的要求是,如果字段-3
中有多个值
我只需要保留第一个值。丢弃该字段中第一个管道之后的任何内容
i、 例如,我只想在字段-3
中保留第一个值,如下所示
field-1;field-2;value-1;field-4;field-5
您能告诉我如何使用sed/awk实现这一点吗
sed 's/[|][^;]*//g' YourFile
- 它删除(不替换)一个
(|
模式)之后的任何值,直到它不是[|]
代码>(
模式)和每次出现时([^;]
选项)g
- 假设
只是一个分隔符,而不是字段值的一部分(如字符串)|
$ 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
$
这可能适用于您(GNU-sed):
这将匹配前三个字段,并将其替换为前两个字段和第三个字段中的第一个值。也许您只需要一个具有regex搜索和替换功能的文本编辑器;只需搜索
|*
并将其替换为代码>。在这种情况下,您需要一个循环来处理每个字段。您还可以直接在$0上修改regex*文件*中的一个字段,这样不仅可以或特别是我想象的示例中的第三个字段
sed -r 's/^(([^;]*;){2}[^|;]*)[^;]*/\1/' file