2016-11-07 7 views
0

印刷されたレポートのデータを、別のシステムに移行するために使用できるフォームにインポートする必要があります。 1つの小さなパターンにこだわっているようです。次の行とともに、レポートの列128から始まる文字列.00を含む行をすべて削除しようとしています。テキストファイルの特定の列にsedの一致がありますか?

私は、次を使用しています:sed '/^\{128\}\.00/,+1 d'inputfile >outputfile

私は、FreeBSDを使用していると私は、REのエラーを取得しています:無効な繰り返しオペレータのオペランドを。私は次の行を削除するために+1を取り除いて実験すると同じエラーが出るので、もっと基本的なものがないと思います。

(私は確かに誰かが飛び込んで「あなたはawkを使うべきです...」と言っていますが、私はsedを使ってこれをやろうとする特定の理由があります。そして残念ながら、私はsed/awkの魔法使いだったので、私はちょうどそれらの両方で錆びています。)

ありがとうございました。 、ここでは行の折り返しにもかかわらず、最後の列は0.00である

1011-000          .00     .00    .00    .00     .00 
Petty Cash-Shop 

お知らせ:

この

は私が一致しようとしているテキストの2行の例です。私はvimで実験してカラム番号を得ました。私はsedコマンドを実行すると、これらの行の両方が消えることを期待しています。

コマンドをsed '/\.\{128\}\.00/,+1 d'inputfile >outputfileに変更しましたが、それらは消えません。 (「」。必要だったということをキャッチするためにしかし、おかげで私はもはやREのエラーを取得していない。)

+0

あなたの '{128}'量限定子は '^'を変更します。意味はありません。代わりに '。{128}'を使用してください(または '。\ {128 \}')。 – Aaron

+1

'\ {128 \}'の前には何もありません。 – 123

+1

"列"をどのように区切っていますか?スペース、コンマ、タブ、その他何か?それとも、「キャラクターの位置」を意味するのですか?あなたのキーボードで "a"、 "w"、 "k"のキーが壊れていない限り、sedの使い方が悪いのは悪いことです。 sedは、個々の行に単純なサブプログラムを追加するためのものです。あなたはこれをやっていないので、これはsedの仕事ではありません。awkの仕事です。あなたのコンピュータは現在、sedを使ってこのようなことをすることができます。 –

答えて

0

このお試しください:

sed '/^.\{127\}\.00/{N;d;}' inputfile > outputfile 

を127文字の後の次の文字列が.00の場合は、に次の行を追加しますNコマンドを使用してパターンスペースを削除し、dを使用して削除します。

+0

それは私にエラーをもたらしました: "dコマンドの最後の余分な文字"。しかし、私はBSD sedとLinux/GNU sedの違いから問題を見つけているかもしれません。助けてくれてありがとう。 –

+0

'd'コマンドの後に'; 'を追加しました。それが動作するかどうか私に教えてください。 – SLePort

+0

ハ!美しく働いた!ありがとうございます! –

関連する問題