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

使用shell脚本从管道分隔文件中的字段中删除空格,shell,sed,Shell,Sed,我不熟悉unixshell脚本 我需要帮助从字段中删除前导空格和尾随空格。但是我需要保留单词之间的空格 请查看下面的数据示例和所需结果,以了解我的问题 数据样本: 1-B48980007 |82984788|317 |ALQ| |4423271 | 0| | I0000000000000000000245729|28887957|IL FR | | |00000000573| 0| |

我不熟悉unixshell脚本

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

请查看下面的数据示例和所需结果,以了解我的问题

数据样本:

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的/*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/g'文件名>测试

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

非常感谢您的帮助

谢谢, 萨维塔

使用:

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
这可能会奏效:

sed 's/\s*|\s*/|/g' input_file

编辑:删除不必要的参数和更改

我用以下sed语句解决了问题:

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

要删除选项卡空间,我必须按“tab”键\在我的情况下不起作用


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

考虑将逗号作为csv或文本文件中数据列的分隔符,这里是一个删除前导和尾随的分隔符,使空格变为单个

cat filename.txt | fmt -su | sed 's/^ *//g' | sed 's/ *$//g' | sed 's/ ,/,/g' | sed 's/, /,/g'

显然,他的
sed
希望管道反斜杠被转义,但我将其作为sed-e的/*\\\\\*/\\\\\\\\\\\\/g'文件名。但输出中仍然有多余的空格。@Savitha是否还有其他形式的空格需要删除,或者只是问题中所述的空格?@Michael:如果这是一个愚蠢的问题,我很抱歉。但是还有什么其他形式的空白呢?@Savitha一点也不傻。空白是指没有打印表示的字符,而用于其他单词之间的间距。对于在sed中使用行,相关的是空格和制表符。其他形式的空白在更一般的情况下是相关的,例如,可以包含多行的字符串将换行字符作为空白。我尝试了您的解决方案,但输出中仍然有空格。它们是空格还是空行?如果后者用
/^$/d预先准备上述命令我相信,是“tab(Chr(9))”没有被删除。
cat filename.txt | fmt -su | sed 's/^ *//g' | sed 's/ *$//g' | sed 's/ ,/,/g' | sed 's/, /,/g'