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

Sav*_*tha 4 shell sed

我是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|  |
Run Code Online (Sandbox Code Playgroud)

期望的结果:

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

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

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

I0000000000000000000245721|15348717|AN BV|||00000001526|0||
Run Code Online (Sandbox Code Playgroud)

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

sed的/*\| /\|/g'file_name> 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||
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

谢谢你,Savitha

Mic*_*ber 10

使用:

sed -e 's/ *| */|/g' file_name
Run Code Online (Sandbox Code Playgroud)

给出了期望的结果:

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

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

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

I0000000000000000000245721|15348717|AN BV|||00000001526|0||
Run Code Online (Sandbox Code Playgroud)

请注意,此方法仅删除空格字符.要排除所有空格,还必须考虑制表符.使用任何符合POSIX标准的sed实现,您可以这样做:

sed -e 's/[[:space:]]*|[[:space:]]*/|/g' file_name
Run Code Online (Sandbox Code Playgroud)

或者,使用正则表达式的GNU扩展:

sed -e 's/\s*|\s*/|/g' file_name
Run Code Online (Sandbox Code Playgroud)


Sav*_*tha 1

我用下面的 sed 语句解决了这个问题:

sed -e 's/ *\|/\|/g'-e 's/press_tab_key_here*\|press_tab_key_here*/\|/g'-e's/\| */\|/g'文件名

要删除制表符空格,我必须按“制表符”键。'\t' 在我的情况下不起作用。

感谢 Michael、Potong 和 Triplee 的帮助和支持。:)