我是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)
我用下面的 sed 语句解决了这个问题:
sed -e 's/ *\|/\|/g'-e 's/press_tab_key_here*\|press_tab_key_here*/\|/g'-e's/\| */\|/g'文件名
要删除制表符空格,我必须按“制表符”键。'\t' 在我的情况下不起作用。
感谢 Michael、Potong 和 Triplee 的帮助和支持。:)