【问题标题】:Delete Special Characters From File- Unix从文件中删除特殊字符 - Unix
【发布时间】:2016-10-17 03:24:28
【问题描述】:

我有一个文件应该是这样格式化的:

   ID     QTY 
xxxxxxxxx,xxx 
xxxxxxxxx,xxx 
xxxxxxxxx,xxx 
xxxxxxxxx,xxx 
xxxxxxxxx,xxx 

有时会采用这样的格式,但前 9 位数字用特殊字符分隔。

xxx,xx,xx,xx,xxx
xxx/xx/xx/xx,xxx
xx.xxx.xxxx,xxx

我想知道如何从整个 ID 中删除任何特殊字符。

【问题讨论】:

  • 我有sed -e 's/[;,()'\'']/ /g;s/ */ /g' $newDir/$processNew > tmp && mv -f tmp $newDir/$processNew,但是在ID和QTY之间去掉了“,”,我需要保留那个。
  • 最后一列是否总是包含三个字符?
  • 不一定。有一个脚本在我的脚本之后启动,我相信它读取的是逗号的左侧和逗号的右侧。
  • 第一列是否总是包含 9 个字符?
  • 特殊字符全部删除后应始终为9个字符。

标签: linux unix command-line scripting


【解决方案1】:

可能有用。如果两个字段的长度都是固定的,即 9 和 3 个字符,则使用它。

sed  's/[\/.\,]//g' test2|awk '{print substr ($0, 1,9)","substr ($0, 10,13)}'

如果只有第一个字段长度是固定的,即 9 个字符,则使用此命令。

sed  's/[\/.\,]//g' test2|sed -r -e 's/^.{9}/&,/'

【讨论】:

  • 在极少数情况下,ID 会以较小的数字开头,不会填满整个 9 位数字。我已经控制住了,但是让代码一起工作是一件痛苦的事情。有没有办法可以使用最后一个逗号作为中点并删除该逗号左侧的任何特殊字符?
【解决方案2】:

这是一个 sed 脚本。它会删除 每个 特殊字符,然后在包含特殊字符的第 9 行之后重新插入 ,

sed -r '/[./,]/ {s/[,/.]//g; s/(.{9})(.*)/\1,\2/g}'

【讨论】:

  • 有没有办法把逗号留在那里而不必重新添加它?有时前 9 位数字需要前导零,这会弄乱测试用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2016-02-04
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多