14

私は次のようなコマンドラインを実行しています:

filename_listing_command | xargs -0 action_command

ここでfilename_listing_command、ファイルを区切るためにnullバイトを使用します-これはxargs -0消費したいものです。

問題は、いくつかのファイルを除外したいということです。このようなもの:

filename_listing_command | sed -e '/\.py/!d' | xargs ac

しかし、私はを使用する必要がありますxargs -0

sedが必要とする行区切り文字を改行からNULに変更するにはどうすればよいですか?

4

4 に答える 4

20

答えを探してこの SO をヒットし、GNU sed 4.2.2 以降を使用している場合、OP が求めていることを行う -z オプションが追加されました。

于 2014-04-16T17:03:09.013 に答える
7

パイプで通しgrepます:

filename_listing_command | grep -vzZ '\.py$' | filename_listing_command

-z入力でnullターミネータを受け入れ-Z、出力でnullターミネータを生成し-v、一致を反転します(除外します)。

編集:

使用したい場合はこれを試してくださいsed

filename_listing_command | sed 's/[^\x0]*\.py\x0//g' | filename_listing_command
于 2010-09-21T01:39:13.467 に答える
1

どのファイル名にも改行が含まれていない場合は、GNU Parallel を使用してソリューションを読みやすくすることができます。

filename_listing_command | grep -v '\.py$' | parallel ac

GNU Parallel の詳細については、http://www.youtube.com/watch? v=OpaiGYxkSuQ をご覧ください。

于 2010-09-25T18:58:16.213 に答える