我有一个表格文件A.tsv
(分隔符= \t
):
20655|dkljdjj 66 lala
20644|kmkmoii 75 lolo
20477|kmlkooo 88 lili
我想删除第一列中|
(|
管道包含)之后的所有内容,以便:
20655 66 lala
20644 75 lolo
20477 88 lili
我知道如何使用 sed 做到这一点:sed 's/|.*//' A.tsv > B.tsv
但它会删除管道之后的所有内容,而不仅仅是第一列。
那么你知道该怎么做吗?也许与 awk 结合使用?谢谢
答案1
您可以将.
(任何字符)替换为[^\t]
(除制表符之外的任何字符)或[^[:blank:]]
(不包括水平空格的任何字符):
sed 's/|[^\t]*//' A.tsv > B.tsv
sed 's/|[^[:blank:]]*//' A.tsv > B.tsv
如果您更喜欢 awk:
awk '{sub(/\|.*/,"",$1)} 1' OFS='\t' A.tsv
答案2
您还可以使用分组sed
sed -E 's/(\S+)\|\S+\s(.*$)/\1\2/' inputfile
输出
20655 66 lala
20644 75 lolo
20477 88 lili