テキストファイルにファイルのリストがあるとしましょう。
...
/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
任意の数の文字が続く文字列と一致します。/
答え2
grep
PCRE(Perl互換正規表現)をサポートする場合:
$ grep -Po '.*/\Kfoo[^/]*$' file.txt
foobar
foo
.*/
最後の項目と一致し、/
一致\K
を削除します。foo[^/]*$
次に始まるファイル名を探します。foo