我有一个包含以下文字的文件:
我正在寻找摆脱“ - 这个/媒体/新闻/第3节的内容”或“ - 这个/媒体/新闻/随机3的内容”和“然后 * *号”。 我想只留下“文件的名称.mp4” 有时,文件的名称也会像“Name.of.the.file.mp4”
一样打印出来我尝试了不同的方式,但我只是一个初学者,它很快就会让人感到困惑,尤其是正斜率。 任何帮助将不胜感激。
答案 0 :(得分:1)
尝试:
sed 's/.*\/\(.*mp4\).*/\1/' /path/to/your/file.txt
答案 1 :(得分: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}'
答案 2 :(得分: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
答案 3 :(得分:0)
另一种解决方案:
awk '{gsub(/[^.]*\//,""); for(i=1;i<=NF-2;i++) {printf "%s ", $i} print ""}' file
答案 4 :(得分:0)
不需要awk
或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.
答案 5 :(得分:0)
为了避免与正斜杠混淆,有助于知道sed的s
命令没有绑定到/
:s
命令的通常形式是{{1你可以用其他字符替换正斜杠,例如s/pattern/replacement/
。所以,改写一下
@ adayzdone的回答,你可以写:
s,pattern,replacement,