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.

「- Content-of this /media/news/section3」または「- Content-of this /media/news/random3」と「then * *number」を取り除こうとしています。「ファイル名.mp4」だけ残しておきたい また、「ファイル名.mp4」のようにファイル名も出力されることもある

さまざまな見方を試してみましたが、私は初心者であり、特にスラッシュを使用すると、すぐにかなり混乱します。どんな助けでも大歓迎です。

4

6 に答える 6

1

試す:

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

スラッシュとの混同を避けるために、ssedのコマンドがにバインドされていないことを知っておくと役立ちます。コマンド/の通常の形式はですが、たとえば、スラッシュを他の文字に置き換えることができます。したがって、@ adayzdoneの答えを言い換えると、次のように書くことができます。ss/pattern/replacement/s,pattern,replacement,

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

別の解決策:

awk '{gsub(/[^.]*\//,""); for(i=1;i<=NF-2;i++) {printf "%s ", $i} print ""}' file
于 2012-12-08T09:35:15.173 に答える
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またはは必要ありません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_


これらが実際に操作する必要があるファイルの行である場合、少しハッキーではありますが、次のように動作するはずです。

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