需要帮助使用sed剥离字符

时间:2014-11-09 01:21:43

标签: bash sed

我有一个字符串:abc-2.25_20141104-1586.uvw.xyz

我想剥离.uvw.xyz并保留abc-2.25_20141104-1586。如何使用sed执行此操作?帮助赞赏!

8 个答案:

答案 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