我有一个文件 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 是否有一个简单的命令,用于不删除行的其余部分,而是在匹配后删除列的其余部分。
像这样吗?
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
既然别人已经提供了sed和awk的解决方案,这里是纯shell的脚本
#!/usr/bin/env bash
while read -r a b
do
echo "${a%%-*}" "$b"
done < file