好吧,如果您安装cygwin,您可以使用命令行工具的强大功能
$ sed 's/[-)(]//g' input
33344444 anything anything2
44444444 anything anything2
47444544 anything anything2
48444444 anything anything2
84444444 anything anything2
44644442 anything anything2
更新
有时将复杂的任务分成更小的部分更容易。
假设输入看起来像这样(添加标尺)
1 2 3 4 5
12345678901234567890123456789012345678901234567890
3334-444-(4) anything anything2
4444-444-(4) anything anything2
4744-454-(4) anything anything2
48444 44-(4) anything anything2
8444-444-(4) anything anything2
4464-(444)-2 anything anything2
第 1 步是使用cut
to well,剪掉前 17 个字符,删除不需要的字符并存储在 tmp-file 中。
第 2 步是将字符 18 剪切到行尾并存储在 tmp 文件中。
第 3 步是将 tmp 文件合并为一个文件。
像这样的东西:
$ cut -c1-17 input | sed 's/[-)( ]*//g' > c1
$ cut -c18- input > c2
$ paste c1 c2
如果这不符合您的审美,您可以使用awk
. 将以下行放入名为“col.awk”的文件中,或者如果您喜欢它,请选择一个更好的名称:
{
x = substr($0, 0, 17)
y = substr($0, 18, length($0))
gsub(/[-)( ]*/, "", x)
}
{ printf "%-18s%s\n", x, y }
然后这样称呼它:
$ awk -f col.awk input
输出(再次使用标尺):
1 2 3 4 5
12345678901234567890123456789012345678901234567890
33344444 anything anything2
44444444 anything anything2
47444544 anything anything2
48444444 anything anything2
84444444 anything anything2
44644442 anything anything2
请注意,cygwin 喜欢所有具有 unix 样式的行尾,因此您可能需要将输入从 windows 样式转换为 unix 样式。一种可能对您有所帮助的工具是dos2unix
或fromdos
(谷歌是您的朋友)。