2017-02-16 5 views
2

sedを使用して拡張子(abc.jpg)の完全なファイル名を取得しようとしています。sed regex backreferenceに置き換えてなぜ動作しないのですか?

INPUT.TXT:

sfdb/asdjfj/abc.jpg 
asdfj/asdfj/abd.gif 
sfdb/asdjfj/abc.jpg 
sfdb/asdjfj/abc-2.jpg 
asdfjk/asdjf/asdf_?/sfdb/asdjfj/abc_12.jpg 
asdfj/asdfj/abdasdfj 

電流指令:

grep ".jpg" input.txt|sed 's:/\([^/]+\.jpg\):\1:gi' 

のgrepは、指定された行(ここでは必要ではないが)を取得するための一例です。 https://www.regex101.com/r/5GTgak/2

予想される出力

abc.jpg 
abc.jpg 
abc-2.jpg 
abc_12.jpg 

しかし、私はまだ同じ入力ファイルを取得しています私はすでにだけを.jpgの最後の '/' +ファイル名+を得るために、私の正規表現をテストしました。私は間違って何をしていますか?

+1

試してみてください。*/\([^ /] + \。jpg \):\ 1:gi'' –

+0

もう一度、あなたは正規表現の質問のために狩りをしていますか?( –

+0

@WiktorStribiżewはまだ動作しません正規表現は大丈夫です:https://www.regex101.com/r/5GTgak/2 – jack

答えて

1

は、次のコマンドを使用します。

sed -rn 's/^.*\/([^/]+\.jpg)$/\1/gp' input.txt 

-rオプションは、拡張正規表現

/g

ことができます - ちょうど最初のない、正規表現にすべてのマッチへの置換を適用します。

/p - 置換が行われた場合は、新しいパターンスペースを印刷します。

+0

は' s | ^。* /([^])を使うことができます。 sedは非貪欲な正規表現をサポートしていません – Sundeep

+0

@Sundeep、yes、perl * habits、removed * non -gready * stuff – RomanPerekhrest

+1

understandable;)また、 '[^ /]'はすべて '/'がすでに消費されているので '[^。]'と置き換えることができます – Sundeep

関連する問題