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番目のグループに対して同じことを行います。これにより、名前だけが残ります。