gpt4 book ai didi

shell - 使用 shell 脚本从管道分隔文件中的字段中删除空格

转载 作者:行者123 更新时间:2023-12-04 22:35:28 28 4
gpt4 key购买 nike

我是 UNIX Shell 脚本的新手。

我需要帮助从字段中删除前导和尾随空格。但我需要保留单词之间的空格。

请查看下面的数据样本和所需的结果以了解我的问题。

数据样本:

1-B48980007       |82984788|317      |ALQ|     |4423271    |              0|  |

I0000000000000000000245729|28887957|IL FR | | |00000000573| 0| |

I0000000000000000000245715|13822348|RPVIPPR | | |00000000298| 0| |

I0000000000000000000245721|15348717|AN BV | | |00000001526| 0| |

预期结果:
1-B48980007|82984788|317|ALQ||4423271|0||

I0000000000000000000245729|28887957|IL FR|||00000000573|0||

I0000000000000000000245715|13822348|RPVIPPR|||00000000298|0||

I0000000000000000000245721|15348717|AN BV|||00000001526|0||

但是我使用以下命令得到如下输出:

sed 's/*\|/\|/g' 文件名 > testOP

管道('|')是我文件中的分隔符。我需要删除管道前后的空格,但需要保留单词之间的空格,例如:“IL FR”和“AN BV”。
1-B48980007     |82984788|317|ALQ||4423271|           0||

I0000000000000000000245729|28887957|IL FR| ||00000000573| 0||

I0000000000000000000245715|13822348|RPVIPPR| ||00000000298| 0||

I0000000000000000000245721|15348717|AN BV| ||00000001526| 0||

任何帮助是极大的赞赏。

谢谢,
萨维莎

最佳答案

使用:

sed -e 's/ *| */|/g' file_name

给出了想要的结果:
1-B48980007|82984788|317|ALQ||4423271|0||

I0000000000000000000245729|28887957|IL FR|||00000000573|0||

I0000000000000000000245715|13822348|RPVIPPR|||00000000298|0||

I0000000000000000000245721|15348717|AN BV|||00000001526|0||

请注意,此方法仅删除空格字符。要排除所有空格,还必须考虑制表符。使用任何符合 POSIX 标准的 sed 实现,您可以执行以下操作:
sed -e 's/[[:space:]]*|[[:space:]]*/|/g' file_name

或者,使用 GNU 对正则表达式的扩展:
sed -e 's/\s*|\s*/|/g' file_name

关于shell - 使用 shell 脚本从管道分隔文件中的字段中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005128/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com