2016-06-29 12 views
-2

WindowsマシンからダウンロードしてMacに保存したテキストファイルから数字だけを含む行を削除する必要があります。 私は数字で任意の行を削除したのOS Xの数字だけを含む行を削除するには?

sed '/[A-Za-z]/!d' input-file > output-file 

または

sed -n '/[[:alpha:]]/p' 

どれを試してみましたが、唯一の

私は

awk '/[A-Za-z]/' input-file > output-file 

で、それは明らかと考えるようなawkを使用するようにしてください入力ファイルをバイナリとして出力し、バイナリ出力を生成します。

これはテキストエンコード(ISO対UTF-8)か、それとも?

提案がありますか?

+0

なぜ '/^[0-9] [0-9] * $/D''」sedのではありませんか?少なくとも1つの数字と数字だけを含む行は削除されますか?それはあなたが求めているものですね。 'numbers'の指定がより複雑である必要がある場合(小数点、記号、行の複数の数字の間のスペース、先頭のスペース、末尾のスペースなど)、そうする必要があります。サンプルデータを入力として、そのデータに対応する期待出力を含める必要があります。 10行の入力で十分です。期待される出力が小さくなるか、サンプルデータが役に立たない。 –

+0

ファイルはウィンドウ上に作成されましたか?もしそうなら、* nixツールを使う前に 'dos2unix'を実行して行末などを修正しましたか? – AlG

+0

Q( 'sed '/ [A-Za-z] /!d' ...')の最初のコマンドは、アルファベット文字を含まない行を探して削除することに注意してください。 2番目の '' sed -n '/ [[:alpha:]]/p''はアルファベット文字を含む行を探し出して出力します(ただし、句読点は省略されます)。 –

答えて

1

数値だけを含む行を削除したいとします。私は10進数字だけを含む行を意味すると仮定します。

また、ファイルがWindowsマシンからのもので、Macで処理しているとします。 Windowsでは\r\nを使用して行の末尾をマークするので、ファイルを変換していない場合は、削除する行に末尾の\r(CR)文字が含まれることがあります。

sed '/^[0-9]*\r\?$/d' input-file > output-file 

\?\rがオプションであることを意味し、これは、入力ファイルは、WindowsスタイルまたはUNIXスタイルの行末、あるいは混合物を持っているかどうかを動作するはずです。それは残りの行を変換しないので、Windows形式の入力ファイルはWindows形式の出力ファイルを生成します。

grepがCR文字として\rを認識しないため、おそらくgrepが認識しないため、同様のgrepコマンドが機能しませんでした。 MacOSはgrepsedという異なる実装を持っているので、まったく同じように動作しない可能性があります。

より安全で簡単な方法は、ファイルをUnix形式に変換してから、同じsedコマンドを\r\?なしで使用することです。

sed '/^[0-9]*$/d' input-file > output-file 

それとも単純grepコマンドを使用することができます

grep -v '^[0-9]*$' input-file > output-file 
0

あなたの最初のパターンは技術的にはうまくいくはずですが、空白や改行などの行も削除されます。 2番目のパターンは文字/アルファ文字を検索し、一方で出力を抑制するのは-nです。 3番目のパターンは文字/アルファ文字のみを検索しています。

sed -E '/^[0-9]+$/d' 

上記のパターンを使用すると、数字だけを含む行を見つけて削除する必要があります。

3

多くの方法があります。ここでは1です:

-n)自動的にすべての行を出力しますが、非数字( [^0-9])を持ち、それら( p)を印刷( //)行を見ていないと言う
sed -ne '/[^0-9]/p' infile >outfile 

それともawkと同じ考え方:

awk '/[^0-9]/' infile >outfile 

それらの両方が、残念ながら、また(でも任意のスペースを持っていない)任意の完全に空行を削除します。同様にそれらを含めるには、あなたがこのような何かしなければならないでしょう:

# match lines that contain nothing or at least one non-digit 
sed -ne '/[^0-9]/p' -e '/^$/p' infile >outfile 
awk '/[^0-9]|^$/' infile >outfile 

または

# match lines that aren't all digits 
awk '!/^[0-9]*$/' infile >outfile 

しかし、全体のラインの選択のこの種のために、それを使用する方が簡単です grep

# match lines that aren't all digits 
grep -v '^[0-9]*$' infile >outfile 

がない行だけを出力すると、-v)はすべての数字(^[0-9]*$)で構成されます。

+0

OPは数字だけを含む行を探していますね –

+0

OPは数字を含む行を削除しようとしています。 –

+0

'grep -v '[0-9]''は行を削除します。 'hello1234'が得られました。これもアルファベットですので、相関関係は見えません。 –

関連する問題