专家们,我有一个文本文件,其中有一些数学数据,在那里我有一个连字符-,我需要将其替换为0MB,在数字的末尾也需要删除,所以我只能得到数字.

下面是名为file1的文件中的示例数据:

Data:

$cat文件1

 3708MB 5073MB 5153MB  0MB
 -    63097MB 9939MB  53376MB
 -    817MB   681MB   271MB
 -    2655MB   692MB   2112MB

What i have tried:

$ /bin/sed   's/\r//g; s/-/0/g; s/MB//g' tt4
 3708 5073 5153  0
 0    63097 9939  53376
 0    817   681   271
 0    2655   692   2112

或者只是通过column命令更好地将其列化...

$ /bin/sed   's/\r//g; s/-/0/g; s/MB//g' tt4| column -t
3708  5073   5153  0
0     63097  9939  53376
0     817    681   271
0     2655   692   2112

是否有更好的方法来严格确保仅替换前缀和后缀中没有任何内容的连字符-,并且仅当其和数字结尾时才删除MB.

推荐答案

您必须考虑如何独特地捕获模式,以便将其与模式的任何其他外观隔离开来.

在这里,-似乎被空白包围.因此,您可以使用它使其从任何其他具有-的文本(例如,text text)中唯一.

sed 's/ - / 0 /g'

对于模式MB,您可以确保正在查找后跟一些数字的模式.


sed -r 's/([0-9]+)MB/\1/g' 

所以你们可以一起写:

sed -r 's/ - / 0 /g;s/([0-9]+)MB/\1/g' 

Linux相关问答推荐

Aarch64在Linux上是否有红色区域,如果有,是16个字节还是128个字节?

计算与文件第一列对应的第二列中的字符串出现次数

"‘operator<<’匹配失败(可能是因为我的C++/GCC版本问题)"

使用 YASM 程序集时如何更改 64 位 Linux 中的终端 colored颜色 ?

为什么我在从 Linux 通过 telnet 发送 Ctrl-C 后停止接收数据?

将特定列转换为行

我需要制作一个 awk 脚本来解析文件中的文本.我不确定我是否做得正确

在 SLURM 作业(job)脚本中设置和传递字符串变量

如何安装脚本以从命令行的任何位置运行?

Linux命令行如何接受没有pin的蓝牙设备配对

如何优雅地退出 X11 事件循环?

如何像 Nautilus 那样从命令行挂载?

在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

C ++中套接字上的协议缓冲区

将原始数据发送到 TCP 服务器的 Linux 工具

在 Ubuntu 中学习 OpenGL

env和set(在 Mac OS X 或 Linux 上)有什么区别?

我可以使用 awk 将所有小写字母转换为大写吗?

从文件中随机 Select 行而不用 Unix 啜饮它

在tmux中绑定Ctrl+Tab和Ctrl+Shift+Tab