abc.cde.ccd.eed.12345.5678.txt
abcd.cdde.ccdd.eaed.12346.5688.txt
aabc.cade.cacd.eaed.13345.5078.txt
abzc.cdae.ccda.eaed.29345.1678.txt
abac.cdae.cacd.eead.18145.2678.txt
aabc.cdve.cncd.ened.19945.2345.txt
cde.ccd.eed.12345.5678.txt
cdde.ccdd.eaed.12346.5688.txt
cade.cacd.eaed.13345.5078.txt
cdae.ccda.eaed.29345.1678.txt
cdae.cacd.eead.18145.2678.txt
cdve.cncd.ened.19945.2345.txt
然后我会做
for i in `cat test.txt`; do echo ${i#*.}; done
abc.cde.ccd.eed.12345.5678
abcd.cdde.ccdd.eaed.12346.5688
aabc.cade.cacd.eaed.13345.5078
abzc.cdae.ccda.eaed.29345.1678
abac.cdae.cacd.eead.18145.2678
aabc.cdve.cncd.ened.19945.2345
我该怎么办?
解决方法:
用awk:
awk 'BEGIN{FS=OFS="."} NF--' file
如果没有空行,这是有效的.它将输入和输出字段分隔符设置为点.然后,减少一个字段的数量,以便保留最后一个.然后它执行默认的awk操作:{print $0},即打印该行.
用sed:
sed 's/\.[^.]*$//' file
这抓住了最后一块.文本行结束并替换为空.也就是说,它删除它.
随着转速和削减:
rev file | cut -d'.' -f2- | rev
rev反转该行,以便剪切可以从第二个字打印到结尾.然后,转回以获得正确的输出.
用bash:
while ISF= read -r line
do
echo "${line%.*}"
done < file
这执行一个字符串操作,包括从变量$line内容的末尾替换.*的最短匹配.
用grep:
grep -Po '.*(?=\.)' file
所有人都回归:
abc.cde.ccd.eed.12345.5678
abcd.cdde.ccdd.eaed.12346.5688
aabc.cade.cacd.eaed.13345.5078
abzc.cdae.ccda.eaed.29345.1678
abac.cdae.cacd.eead.18145.2678
aabc.cdve.cncd.ened.19945.2345
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。