9

サイズが約 300 KB のテキスト ファイルがあります。このファイルから、文字「P」で始まるすべての行を削除したいと考えています。これは私が使ってきたものです:

> cat file.txt | egrep -v P*

それはコンソールに出力されていません。他のコマンドを使用せずにファイルで cat を使用でき、正常に出力されます。私の最終的な意図は次のとおりです。

> cat file.txt | egrep -v P* > new.txt

エラーは表示されず、何も出力されず、2 番目のコマンドを実行すると、new.txt は空になります。Cygwin がインストールされた Windows 7 を実行していると言わざるを得ません。

4

5 に答える 5

15

説明

  1. ^パターンを行頭に固定するために使用します。
  2. sedおよびdflagを使用して、パターンに一致する行を削除します。

解決策 1

cat file.txt | sed '/^P/d'

より良い解決策

使用sedのみ:

sed '/^P/d' file.txt > new.txt
于 2013-06-20T08:36:45.647 に答える
10

awk を使用:

awk '!/^P/' file.txt

説明

  1. 条件は!(否定) で始まり、次のパターン を否定します。
    • /^P/大文字で始まるすべての行に一致」Pを意味します。
  2. したがって、パターンは「大文字で始まる行を無視する」ように否定ますP
  3. 最後に、( action blockawk ) が欠落している場合の の動作を利用します。つまり、条件を検証するレコードを出力します。{ … }

つまり、言い換えると、大文字で始まる行は無視され、それ以外はPすべて表示されます

ノート

sed行指向でawk列指向です。あなたのケースでは、最初のものを使用する必要があります。Edouard Lopez の応答を参照してください。

于 2013-06-20T10:09:22.733 に答える
2

行頭マークと引用符を使用します。

 cat file.txt | egrep -v '^P.*'

P*P が 0 回以上であることを意味するので、 とともに使用すると-v、行が表示されません

^P.*行頭、次に P、任意の char を 0 回以上意味する

シェルの拡張を防ぐには、クォートが必要です。

これは次のように短縮できます。

egrep -v ^P file.txt

.*は必要ないため、引用符は必要なく、egrepファイルからデータを読み取ることができます。

拡張正規表現を使用しないため、grep正常に動作します

grep -v ^P file.txt

ついに

grep -v ^P file.txt > new.txt
于 2013-06-20T08:36:47.107 に答える