我有一个字符串:abc-2.25_20141104-1586.uvw.xyz
我想剥离.uvw.xyz
并保留abc-2.25_20141104-1586
。如何使用sed
执行此操作?帮助赞赏!
答案 0 :(得分:2)
echo "abc-2.25_20141104-1586.uvw.xyz" | sed 's/\.[a-z]\{3\}\.[a-z]\{3\}//g'
<强>输出强>
abc-2.25_20141104-1586
答案 1 :(得分:1)
$ echo "abc-2.25_20141104-1586.uvw.xyz" | sed 's/\(.*-[0-9]*\)\..*/\1/'
abc-2.25_20141104-1586
说明:(。 - [0-9] )=&gt;除了您不想要的后缀之外,匹配开头的所有其他内容。 和 1 =&gt;第一种模式是否匹配。
请参阅: http://www.grymoire.com/Unix/Sed.html#uh-51 (关于保持模式的部分)
答案 2 :(得分:1)
echo "abc-2.25_20141104-1586.uvw.xyz" | sed 's/.uvw.xyz$//'
Output:
abc-2.25_20141104-1586
答案 3 :(得分:0)
这是一种可能性:
sed 's/\.[[:alpha:]]\{3\}\>//g'
说明:从.
开始,后跟三个字母字符,然后是单词结尾。
答案 4 :(得分:0)
您无需使用sed。使用basename命令可以很容易地完成:
basename abc-2.25_20141104-1586.uvw.xyz .uvw.xyz
应输出
abc-2.25_20141104-1586
答案 5 :(得分:0)
使用awk:
echo "abc-2.25_20141104-1586.uvw.xyz" | awk '{gsub('/\.uvw\.xyz/',"",$0); print $0}'
其他方法:
a="abc-2.25_20141104-1586.uvw.xyz"
echo ${a%.uvw.xyz}
输出:
abc-2.25_20141104-1586
答案 6 :(得分:0)
如果你只是知道你总是想要删除以点分隔的最后两个占位符:
$ string="abc-2.25_20141104-1586.uvw.xyz"
$ string=${string%.*}
$ echo ${string%.*}
答案 7 :(得分:0)
这是awk
方法。 (它将移除任何长度的最后w字段)
echo "abc-2.25_20141104-1586.uvwmore.xyzyes" | awk -F\. 'NF-=2' OFS=\.
abc-2.25_20141104-1586