Grepはデフォルト名から正規表現を見つけましたが、フルネームを返します。

Grepはデフォルト名から正規表現を見つけましたが、フルネームを返します。

テキストファイルにファイルのリストがあるとしましょう。

...
/foo/barfoo
/bar/foo/foobar
/foobar/bar/foo
...

このテキストファイルを検索するスクリプトがあります。検索コマンドと同様に、ファイルのデフォルト名を検索できるようにしたいです。これまで私はこのgrepコマンドを使用してきましたが、grep -E */.*${1}[^/]*$正規表現をgrepしたい場合を除いてうまくいきます。したがって、上記の例で「foo」で始まるファイルを見つけるにはそうしますが、完全正規myscript --basename ^foo表現はgrep -E */.*^foo[^/]*$明らかに失敗するため失敗します。 xargsを使用して各エントリをデフォルト名に挿入することを検討しましたが、最後にフルファイルパスを出力するにはスクリプトが必要です。

どんなアイデアがありますか?私はPOSIX準拠を好むが、GNUismsも良い。

ベストアンサー1

foo基本名の先頭で一致する必要がある場合:

< inputfile grep '/foo[^/]*$'
  • /foo[^/]*$:文字列の後に文字列の終わりではなく、/foo任意の数の文字が続く文字列と一致します。/

ifは、fooデフォルト名のどこにでも一致できます。

< inputfile grep 'foo[^/]*$'
  • foo[^/]*$:文字列の後に文字列の終わりではなく、foo任意の数の文字が続く文字列と一致します。/

おすすめ記事