打印给定行中的所有字母(不包括数字)

打印给定行中的所有字母(不包括数字)

我有一个文件

文件1:

Edward-201-singer
Andrew-James-404-writer

我想要输出为

Edward
Andrew-James

答案1

假设您想要一行中的所有字符,直到找到一个数字。然后-也排除该数字之前的可选值:

sed 's/-\{0,1\}[[:digit:]].*//' your-file

(对于 GNU sed,您可以替换\{0,1\}\?. 或sed -E 's/-?[[:digit:]].*//'某些)。

这应该可以处理您的示例,尽管没有更多详细信息,我不能说它可以处理您文件中的所有内容。

如果您想就地更改文件,在某些sed实现中,您可以-i.bak在 sed 命令中添加 a (将文件备份到your-file.bak,对 进行更改your-file)或> new-file在末尾添加 a 以写入new-file结果

答案2

要删除第一个数字后面的破折号(以及破折号数字)之后的所有内容:

sed 's/-[0-9].*//' file

根据文件中问题中给出的数据file,生成

Edward
Andrew-James

仅删除数字(如问题标题中所述)可以使用 完成tr -d '0-9' <file,但会产生

Edward--singer
Andrew-James--writer

...这不是你想要的。

答案3

在不了解有关格式的任何其他信息的情况下,这适用于您提供的两个值:

while read
do
    echo "${REPLY%-*-*}"
done < file1

相关内容