テキストファイルにファイルのリストがあります。このテキストファイルからフォルダ名のみを取得するにはどうすればよいですか? (同じ名前のフォルダは一度だけ作成されます)
/lib/i386-linux-gnu/libwrap.so.0.7.6
/lib/i386-linux-gnu/libbsd.so.0
/lib/i386-linux-gnu/libdbus-1.so.3.19.4
/lib/i386-linux-gnu/libexpat.so.1.6.7
/usr/bin/rakconvert
/usr/bin/python-config
/usr/bin/winecpp
/usr/bin/wine
/usr/bin/regedit
/usr/bin/pycompile
/usr/bin/msiexec
これはファイルの内容です1.txt
。出力が必要な場合:
/lib/i386-linux-gnu/
/usr/bin
私が行ったすべての検索は、ファイルのリストをファイルに送信することです。 「猫、dirname」など私は多くのコードを使用しているので、ここに追加しませんでした。
申し訳ありません。私の質問は明確ではありませんでした。ありがとう
答え1
これを純粋にテキスト処理の問題として扱う場合(つまり、Unixファイル名に改行文字を含めることができるという事実を無視し、これが正常であることを知らない限り、通常はテキストファイルにパス名を保存しない理由です)、文字の後ろのすべてを削除できます/
。すべてのラインで独自の結果を得ることができます。
$ sed 's,/[^/]*$,,' 1.txt | sort -u
/lib/i386-linux-gnu
/usr/bin
このsed
式s,/[^/]*$,,
(と書くこともできます)は、スラッシュの後にスラッシュ以外の文字が続くまで(行の終わりまで)s/\/[^/]*$//
一致するすべての項目を削除します。/[^/]*$
最後に、sort -u
結果は一意の項目だけを維持しながらソートされます。データがすでにソートされている場合はuniq
それを使用できます。