我有一个文件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,因为不删除其余的行,但是匹配后的其余部分。
答案 0 :(得分: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 :(得分:2)
由于其他人已经提供了sed和awk的解决方案,这里是带有纯shell的脚本
#!/usr/bin/env bash
while read -r a b
do
echo ${a%%-*} $b
done < file