2

我有一个非常简单的 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

4 回答 4

7

不需要正则表达式:

$ basename sample.txt .txt
sample

或使用任何与 POSIX 兼容的外壳:

$ echo "$a"
sample.txt

$ y=${a%.txt}

$ echo "$y"
sample
于 2013-05-23T14:00:53.023 回答
1

试试这个:

grep -Po '.*(?=\.txt$)'
于 2013-05-23T14:00:27.617 回答
0
  1. 删除 .txt

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

  2. 使用基本名称

    名称=echo $fullname|basename .txt

于 2013-05-23T14:01:31.230 回答
0

这是重命名文件的脚本。

将文件名作为参数传递

!/bin/bash

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

于 2013-05-24T06:52:22.937 回答