1

我有一个包含以下文本的文件:

  • 内容-这个/media/news/section3/S02/basic/文件名.mp4然后是545756。
  • 此/media/news/section3/S02/文件名的内容.mp4 然后是 42346。
  • 这个/media/news/random3/S02/basic/文件名的内容.mp4然后是543。
  • 这个/media/news/random3/S02/basic/文件名的内容.mp4然后是789。

我希望摆脱“-这个/media/news/section3的内容”或“-这个/media/news/random3的内容”和“然后* *编号”。我想只留下“文件名.mp4”有时文件名也像这样打印“Name.of.the.file.mp4”

我尝试了不同的查看方式,但我只是一个初学者,它很快就会变得非常混乱,尤其是正斜杠。任何帮助,将不胜感激。

4

6 回答 6

1

尝试:

 sed 's/.*\/\(.*mp4\).*/\1/' /path/to/your/file.txt
于 2012-12-08T01:39:35.497 回答
0

为避免与正斜杠混淆,了解ssed 的命令不限于以下内容会有所帮助/: 虽然命令的通常形式ss/pattern/replacement/,但您可以将正斜杠替换为其他字符,例如s,pattern,replacement,。因此,要改写@adayzdone 的答案,您可以这样写:

sed 's,.*/\(.*mp4\).*,\1,' /path/to/your/file.txt
于 2012-12-08T11:17:10.710 回答
0

没有必要awkor sed。您可以简单地使用grep

grep -o "[^/]*\.mp4" file

解释:

-o, --only-matching
       Print only the matched (non-empty) parts of a matching line, with each
       such part on a separate output line.

[^/]*   Match anything not a forward slash any number of times

\.mp4   Remember to escape the dot metacharacter.
于 2012-12-08T10:07:34.447 回答
0

这不会直接回答您的问题,但无论如何它可能会做您需要的事情:

如果这些是mp4您正在描述的计算机上的文件,您可以获得文件的名称,如下所示:

find /path/to/some/base/dir -type f -name "*.mp4" -exec basename {} \;

mp4这将为您提供 . 下所有文件的文件名(不以目录路径为前缀)/path/to/some/base/dir


如果这些实际上是您需要操作的文件中的行,则以下内容应该可以工作,尽管有点 hacky:

awk 'BEGIN{FS="/"} {print $NF}' input_file.txt | awk '{$NF=$(NF-1)=""; print}'
于 2012-12-08T01:32:35.713 回答
0

假设您的文件名为files.txt,并且假设您只对mp4文件感兴趣,那么以下sed命令应该适用于其中带有或不带有点的名称:

sed -i "s/^.*\/\(.*mp4\).*$/\1/g" files.txt

我命名了我的文件files.txt,这些是它的内容,在上述命令之前和之后:

之前

Content-of this /media/news/section3/S02/basic/Name of the file.mp4 then 545756.
Content-of this /media/news/section3/S02/Name of the file.mp4 then 42346.
Content-of this /media/news/random3/S02/basic/Name.of.the.file.mp4 then 543.
Content-of this /media/news/random3/S02/basic/Name of the file.mp4 then 789.

之后

Name of the file.mp4
Name of the file.mp4
Name.of.the.file.mp4
Name of the file.mp4
于 2012-12-08T01:40:21.757 回答
0

另一种解决方案:

awk '{gsub(/[^.]*\//,""); for(i=1;i<=NF-2;i++) {printf "%s ", $i} print ""}' file
于 2012-12-08T09:35:15.173 回答