私はsedを使用してファイルのリストをフィルタリングしています。フォルダーのリストを並べ替えてあり、特定の行の後のすべての行を取得したい。このタスクを実行するには、説明したソリューションを使用しています here これは、試した入力でかなりうまく機能しますが、最初の行に一致する場合は機能しません。その場合、sedは入力のすべての行を削除します
ここに例があります:
(ssh) fabio@s2 : ~
[0] % ls -1 /
bin
boot
...
sys
tmp
usr
var
vmlinuz
(ssh) fabio@s2 : ~
[0] % ls -1 / | sed '1,/tmp/d'
usr
var
vmlinuz
(ssh) fabio@s2 : ~
[0] % ls -1 / | sed '1,/^bin$/d'
# sed will delete all lines from the input stream
最初の行が正規表現で一致する場合の制限ケースも考慮するようにコマンドを変更するにはどうすればよいですか?
ところでsed '1,1d'
は正しく機能し、最初の行のみを削除します。
これを試してください(GNU sedのみ):
sed '0,/^bin$/d'
..出力は:
$ sed '0、/ ^ bin $/d'ファイル boot ... sys tmp usr var vmlinuz
次のsed
コマンドは、一致する行以降のすべての行を出力します。
sed -n '/^WHATEVER$/,$p'
-n
スイッチは、指示された場合にのみsed
を印刷します(p
コマンド)。
一致する行を含めたくない場合は、ファイルの先頭から一致する行までを削除するようにsedに指示できます。
sed '1,/^WHATEVER$/d'
(行を削除するd
コマンドを使用します。)
あなたも試すことができます:
awk '/searchname/{p=1;next}{if(p){print}}'
一致の前にタグを挿入し、スコープ/start/,/####tag####/
で削除します。