unix 在匹配后删除字符串的一部分,但不使用sed删除行

gstyhher  于 4个月前  发布在  Unix
关注(0)|答案(2)|浏览(54)

我有一个文件a.com作为

N-N3-0.0012   -1  5  6  7  L
C-CT-0.002225 -1  5  8  9  H H-3-1
H-H-0.003534  -1  6  3  4  L

字符串
我想a.com修改为

N  -1  5  6  7  L
C  -1  5  8  9  H H-3-1
H  -1  6  3  4  L


基本上,我想删除第一列中第一个“-”匹配之后的所有内容,但保留所有其他列。
我可以通过将第一列提取到文件中,然后使用sed删除匹配“-”之后的所有内容,并将其替换为原始文件中的第一列。但我想知道是否有一个简单的sed命令,用于在匹配后不删除行的其余部分,而是删除列的其余部分。

krugob8w

krugob8w1#

就像这样?

kent$  awk '{sub(/-.*/,"",$1)}7' a.com
N -1 5 6 7 L
C -1 5 8 9 H H-3-1
H -1 6 3 4 L

字符串
sed:

kent$  sed 's/-\S*//' file
N   -1  5  6  7  L
C -1  5  8  9  H H-3-1
H  -1  6  3  4  L


如果要保留以下格式:

kent$  sed 's/-\S*\s*/ /' file
N -1  5  6  7  L
C -1  5  8  9  H H-3-1
H -1  6  3  4  L

wsewodh2

wsewodh22#

由于其他人已经用sed和awk提供了解决方案,下面是纯shell的脚本

#!/usr/bin/env bash

while read -r a b
do
   echo "${a%%-*}" "$b"
done < file

字符串

相关问题