切割部分字符串

时间:2011-11-14 20:47:33

标签: linux bash parsing sed grep

有人可以解释一下如何使用像sed这样的linux功能来剪切一些字符串。 例如,我有刺痛

THIS-some-string-zzz-55.xml

如何剪切“.xml”?

结果应该是:

THIS-some-string-zzz-55

谢谢!

4 个答案:

答案 0 :(得分:5)

有几种方法:

 basename thisfile.xml .xml

basename是它自己的可执行文件,因此您可以从shell脚本调用它,或者从C或脚本语言执行它。


如果你的shell是bash:

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


..最后用sed

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

sed中常规expressin中的'$'将仅在字符串末尾处进行.xml匹配。

答案 1 :(得分: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,您可以在这里找到我在此使用的正向前瞻(?=*)

答案 2 :(得分:0)

这应该有效:

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

答案 3 :(得分: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了解相关信息。