![打印给定行中的所有字母(不包括数字)](https://linux22.com/image/132946/%E6%89%93%E5%8D%B0%E7%BB%99%E5%AE%9A%E8%A1%8C%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%AD%97%E6%AF%8D%EF%BC%88%E4%B8%8D%E5%8C%85%E6%8B%AC%E6%95%B0%E5%AD%97%EF%BC%89.png)
我有一个文件
文件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