我是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'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||
非常感谢任何帮助。
谢谢, Savitha
答案 0 :(得分:10)
使用:
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
答案 1 :(得分:1)
这可能有效:
sed 's/\s*|\s*/|/g' input_file
编辑:删除了不必要的parens和替换
答案 2 :(得分:1)
我用下面的sed语句解决了这个问题:
sed -e 's/ *\|/\|/g'
-e 's/press_tab_key_here*\|press_tab_key_here*/\|/g'
-e 's/\| */\|/g'
file_name
要删除制表符空格,我不得不按“制表符”键。 '\ t'在我的情况下不起作用。
感谢Michael,Potong和Triplee的所有帮助和支持。 :)
答案 3 :(得分:-1)
将逗号视为csv中的分隔符或数据列的文本文件,这里是一个删除前导尾部,使空格单。
cat filename.txt | fmt -su | sed 's/^ *//g' | sed 's/ *$//g' | sed 's/ ,/,/g' | sed 's/, /,/g'