试图在shell脚本中grep部分文件名?

时间:2013-05-23 13:57:23

标签: regex shell grep

我有一个非常简单的grep问题,但似乎无法解决它。我有几个这样的文件:

sample.txt
sample7.doc.txt
another_sample.sample.lst.txt
three.txt

...而我只是想在“.txt”之前抓住所有内容。我试图在shell脚本中这样做:

ame=`echo $1 | grep -Po "^[A-Za-z0-9]+"`

...但当然只返回第一个“点”之前的部分。有人可以帮忙修改这个正则表达式吗?

4 个答案:

答案 0 :(得分:7)

不需要regexp:

$ basename sample.txt .txt
sample

或使用任何与POSIX兼容的shell:

$ echo "$a"
sample.txt

$ y=${a%.txt}

$ echo "$y"
sample

答案 1 :(得分:1)

试试这个:

grep -Po '.*(?=\.txt$)'

答案 2 :(得分:0)

  1. 删除.txt

    名= echo $1|sed 's/.txt$//'

  2. 使用basename

    名= echo $fullname|basename .txt

答案 3 :(得分:0)

以下是重命名文件的脚本。

将文件名作为参数传递

!/斌/庆典

mv $ 1 $(echo $ 1 | awk -F.txt'{print $ 1}')