1

異なるサブディレクトリに同じ名前の複数のファイル(> 1000)があります

dir1 / out.txt

   # white row
    1 2 3 4 5
    3 3 4 5 6 
    4 1 4 5 8
    # white row

dir2 / out.txt

 # white row  
    1 2 3 4 5
    3 3 4 5 6 

    4 1 4 5 8
    # white row 

dir3 / out.txt

# white row 
1 2 3 4 5
3 3 4 5 6 
4 1 4 5 8
# white row 

すべての空白を削除したい(通常、見出し行、末尾行、および行の間)。

Unixで行う簡単な方法はありますか?簡単な質問のためのApolozie。

編集:

私はすべてのスペースを削除しようとしているのではなく、空白である行全体を削除しようとしています

4

2 に答える 2

1

out.txtこれにより、現在の作業ディレクトリのサブディレクトリで指定されているすべてのファイルが検索され、各ファイルから行を含むwhileスペースが削除されます。

find . -name "out.txt" -exec sed -i '/^$/d' '{}' \;

:これらのファイルを変更するには、書き込み権限を所有している必要があります。

于 2012-05-21T17:04:21.483 に答える
1

空白行だけを削除するには、次を使用します

sed -i '/^$/d' file

スペースを含む空白行を削除するには、次を使用します

sed -i '/^[[:blank:]]*/$' file

ファイルからすべてのスペースを削除するには、次を使用します

sed 's/ //g' file > file.new && /bin/mv file.new file

それはスペース文字です。空白にタブ文字が含まれる可能性がある場合は、次を使用します

sed 's/[[:blank:]]//g' file

LinuxでGNU sedを使用している場合は、次のことができます

sed -i 's/[[:blank:]]//g' file

空白行を削除する場合は、追加します

 sed -i 's/[[:blank:]]//g;/^$/d' file

これらすべてを検索コマンドでラップして、次のようなファイル名を取得します

 cd $baseDir ; find . -name '*.txt' -print | xargs sed -i 's/[[:blank:]]//g;/^$/d' {}

最初の部分だけを使用し、

 find . -name '*.txt' -print 

正しいファイル名リストが表示されるまで調整します。

次に、出力として 1 つのテスト ファイル名のみを持つように検索出力を強制することによって、後半をテストします。つまり、

 find . -name 'myTestOut.txt' | xargs ...

これをテストする簡単な方法は今のところありませんが、この種の質問はここ SO で毎日聞かれ[unix] [linux] [xargs] [sed]ます。

これが役立つことを願っています。

于 2012-05-21T16:43:14.517 に答える