逆さまの猫 [閉じる]

逆さまの猫 [閉じる]

SQLクエリの結果である2つのドキュメントがあります。

たとえば、私はドキュメント1.lstそれは:

    John1    0
    Julien  10
    Jules3   0
    Julie   30

この Doc1.lst では sed を使用して名前部分のみを含めるので、ドキュメント2.lst例:

    John1
    Julien
    Jules3
    Julie

私は十分に知らないsedこのコマンドは数値だけをキャプチャするので、Doc1.lstを取得してDoc2.lstの内容を削除するDoc3.lstを生成する方法があるかどうか疑問に思います。

これは反転だろうチェーン。ところで、あなたがいるならsedこのコマンドは非常に良い数だけをキャプチャします。

答え1

awk希望の出力を得るには、cutまたはを使用できますsed。前者が好ましい。

ファイルがDoc1.lst次の場合

John1    0
Julien  10
Jules3   0
Julie   30

次のawkコマンドは目的の出力を取得します。フィールド区切り文字が空白であると仮定します。

awk '{print $1}' Doc1.lst

使用cut

cut -d' ' -f1 Doc1.lst

またはsed.notesを使用してください。これsedに使用したくないフローエディタです。sedしかし、とにかくこれはあなたが望む行です。

sed 's/\([a-zA-Z]*\).*/\1/' Doc1.lst

答え2

awk '{print $1}' Doc1.lst > Doc3.lst

答え3

tr -s '[:space:]' \\n <infile | grep '^[0-9]'

...または...

sed '/^[0-9]/P;y| |\n|;D' <infile

...または、ちょうど...

sed 's/.* //' <infile

...しかし、最後の作業では、s/ *$//後にスペースがある場合に備えて最初に行うことをお勧めします。

より一般的には、以下を使用してグループに番号を付けることができますsed

sed 's/ *[^ ]\{1,\} *//' <infile

...これを行うと、行から空白以外の文字の最初のセットとすべての周囲の空白が削除され、数字だけが残ります。しかし...

sed 's/ *[^ ]\{1,\} *//2' <infile

...代わりに、各行の空白ではなく2番目のグループに対して同じことを行います。これにより、名前だけが残ります。

関連情報