2013-06-28 13 views
12

私はsedを使ってファイルのリストをフィルタリングしています。私はフォルダのソートされたリストを持って、私は特定のものの後にすべての行を取得したい。私が試みたどんな入力でもうまく動作するhereを説明した解決策を使用しているこの作業を行うには、最初の行に一致したときに動作しません。その場合、sedは、入力sedと一致する前にすべての行を削除します

のすべての行を削除します。ここでは例です:

(ssh) [email protected] : ~ 
[0] % ls -1/
bin 
boot 
... 
sys 
tmp 
usr 
var 
vmlinuz 

(ssh) [email protected] : ~ 
[0] % ls -1/| sed '1,/tmp/d' 
usr 
var 
vmlinuz 

(ssh) [email protected] : ~ 
[0] % ls -1/| sed '1,/^bin$/d' 
# sed will delete all lines from the input stream 

は、どのように私は、最初の行が正規表現にマッチしているときにも限度のケースを検討するコマンドを変更する必要がありますか?

BTW sed '1,1d'正しく動作し、最初の行のみを削除します。

+0

はコメントありがとうございました。訂正され、他にもいくつかのソリューションが追加されました。 – jm666

答えて

14

(GNUのみSED)、これを試してみてください。

sed '0,/^bin$/d' 

..outputは次のとおりです。

 
$sed '0,/^bin$/d' file 
boot 
... 
sys 
tmp 
usr 
var 
vmlinuz 
+0

これは最善の選択肢と思われます。あなたの前の答えはGNU sedで動作することがわかったので、これを削除しました。私はGNU sedを使用していますので、これは正解ですが、好奇心のために、非GNU sedではうまくいきますか? – Fabio

+0

GNU固有のコマンドがない、それは動作するはずです、私のテキストブックを教えてください。 – Endoro

+0

OS X sedでは動作しませんが、gnuシステムで必要と言いました。 – Fabio

11

このsedコマンドは、後にすべての行を印刷して、一致する行を含めます:

sed -n '/^WHATEVER$/,$p' 

-nスイッチでは、sedが通知されたときにのみ印刷されます(pコマンド)。

あなたは、一致する行を含めたくない場合は、ファイルの先頭から一致する行を削除するsedを伝えることができます:

sed '1,/^WHATEVER$/d' 

を(我々が行を削除dコマンドを使用します。)

+0

私はこのオプションについても検討しましたが、一致する行が含まれるため終了しました。私は 'tail -n + 2'オプションを見逃しました。これも良いことです。ありがとう。 – Fabio

+0

あなたは私の一日を保存します。非常に理解し、完全なfonctional簡単です。確かに、一致する行が含まれていれば最高の答えです。 – jmcollin92

4

あなたもして試すことができます:

awk '/searchname/{p=1;next}{if(p){print}}' 
関連する問題