2011-11-14 126 views
2

有人可以解释一下如何使用sed等linux特性来切割一些字符串。 比如我有刺痛切割部分字符串

THIS-some-string-zzz-55.xml 

如何削减 “.XML”?

结果应该是这样的:

THIS-some-string-zzz-55 

谢谢!

回答

0

这应该工作:

echo "THIS-some-string-zzz-55.xml" | sed 's/\.xml$//' 
+0

-1无解释回复发帖 –

5

几个方法:

basename thisfile.xml .xml 

基本名称是它自己的可执行文件,这样你就可以从一个shell脚本调用,或从C或脚本语言Exec的它。


如果你的shell是bash:

FILE=filename.xml 
echo “filename: ${file%.*}” 
echo “extension: ${file##*.}” 


与 ..和最后的sed

echo "filename.xml" | sed 's/\.xml$//' 

这 '$' 在sed的常规expressin将使.XML比赛只在字符串的末尾。

1

Grep时间

$> echo THIS-some-string-zzz-55.xml | grep -o -P "(.*)(?=\.xml)" 
THIS-some-string-zzz-55 

的grep有一个神奇的-P标志

-P, --perl-regexp 
      Interpret PATTERN as a Perl regular expression. This is highly 
      experimental and grep -P may warn of unimplemented features. 

顺便说一句,这里是一个有用的table,在这里你可以找到正向前查找(?=*),那我在这里使用。

0

Bash算作Linux功能吗?

如果是的话,这可能会为你工作:

# string="THIS-some-string-zzz-55.xml" 
# echo ${string%.xml} 
THIS-some-string-zzz-55 

或在这种情况下:

# echo ${string%.*} 
THIS-some-string-zzz-55 

here的说明。