3

1 行おきに空白の csv ファイルがあります。私はすべてを試しましたが、行を削除するものは何もありません。数字 44 が有効な各行に表示されるので、簡単になります。私が試したこと:

grep -ir 44 file.csv
sed '/^$/d' <file.csv
cat -A file.csv
sed 's/^ *//; s/ *$//; /^$/d' <file.csv
egrep -v "^$" file.csv
awk 'NF' file.csv
grep '\S' file.csv
sed 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' <file.csv
cat file.csv | tr -s \n

空白行を想像していると判断しましたが、Google スプレッドシートにインポートすると、まだ空白行が残っています! 私の正気を疑い始めている!誰でも助けることができますか?

4

5 に答える 5

1

与えられた:

$ cat bl.txt
Line 1 (next line has a tab)

Line 2 (next has several space)

Line 3

Perl で空白行を削除できます。

$ perl -lne 'print unless /^\s*$/' bl.txt
Line 1 (next line has a tab)
Line 2 (next has several space)
Line 3

awk:

$ awk 'NF>0' bl.txt
Line 1 (next line has a tab)
Line 2 (next has several space)
Line 3

セッド + トラ:

$ cat bl.txt | tr '\t' ' ' | sed '/^ *$/d'
Line 1 (next line has a tab)
Line 2 (next has several space)
Line 3

ただsed:

$ sed '/^[[:space:]]*$/d' bl.txt
Line 1 (next line has a tab)
Line 2 (next has several space)
Line 3
于 2015-05-12T23:02:28.573 に答える
1

このオプションを使用し-iて、元のファイルを編集したファイルに置き換えます。

sed -i '/^[ \t]*$/d' file.csv

または、別のファイルに出力して名前を変更します。これはまさに何をするか-iです。

sed '/^[[:blank:]]*$/d' file.csv > file.csv.out && mv file.csv.out file.csv
于 2015-05-12T21:51:29.910 に答える
1

コマンドが、元のファイルの代わりに使用される新しいファイルに出力をキャプチャすることを示していないという事実を除けば、次のことを除いて、何も問題はありません。

cat file.csv | tr -s \n

次のようにする必要があります。

cat file.csv | tr -s '\n'  # more efficient alternative: tr -s '\n' < file.csv

それ以外の場合、シェルは を食べ、\見えるtrのは だけですn

ただし、上記は真に空の行のみを削除するだけですが、他のコマンドの一部は空白行 (空またはすべて空白) も削除することに注意してください。

また、-i(大文字と小文字を区別しない一致の場合) ingrep -ir 44 file.csvは無意味であり、(再帰検索の場合) を使用しても のみが検索される-rという事実は変わりませんが、一致する各行の前にファイル名とそれに続くが追加されます。file.csv:


実際に出力を新しいファイルにキャプチャし、そのファイルにまだ空白行がある場合、質問で既に言及したcat -A( cat -etBSD のようなプラットフォームでは) は、ファイルに異常な文字が存在するかどうかを次の形式で表示する必要があります。文字^<char>などのシーケンス^Mの。\r

于 2015-05-12T23:26:01.663 に答える
1
sed -n -i '/44/p' file

-n は印刷をスキップすることを意味します
-i inplace (同じファイルを上書きします)
- /44/p '44' が存在する行を印刷します

「44」が存在しない場合

sed -i '/^\s*$/d' file

\s は一致する空白、^startofline、$endofline、d 行の削除

于 2015-05-12T22:25:25.360 に答える