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

问题描述 投票:0回答:2

我有一个文件 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 是否有一个简单的命令,用于不删除行的其余部分,而是在匹配后删除列的其余部分。

unix awk sed
2个回答
3
投票

像这样吗?

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

1
投票

既然别人已经提供了sed和awk的解决方案,这里是纯shell的脚本

#!/usr/bin/env bash

while read -r a b
do
   echo "${a%%-*}" "$b"
done < file
© www.soinside.com 2019 - 2024. All rights reserved.