誰かがファイルの上部にあるすべての先行空白行を削除するこのコードを説明しますか?
sed '/./,$!d' file
私はそれが最初の文字とのみ一致する正規表現であることを知っていますが、$!d部分を理解していません。これは置き換えられるのですか、それともゲームのオプションですか?
「s/」で始まらないと…それでも検索コマンドですか?
答え1
sed '/./,$!d'
文字(スペースまたはスペースではない)を含む最初の行からファイルの終わりまで - 否定(ファイルの先頭から文字を含む最初の行の前の行までを意味) - 削除します。
これにより、先行エントリが削除されます。空空行ではなく行。前の空行(空白行または空白文字のみを含む行)を削除するには、と言います'/\S/,$!d'
。
「Sed、紹介、チュートリアル」をご覧ください。http://www.grymoire.com/Unix/Sed.html。その後、リファレンスマニュアルをお読みください。https://www.gnu.org/software/sed/manual/sed.html。
簡単に言うと:
コマンドの一般的な形式は
sed
[selector] [negation] command [flag]です(角括弧はオプションの部分を表します)。セレクタがある場合は、コマンドが適用される行を選択します。
存在する場合は
!
セレクタを無効にします。つまり、セレクタと一致しない行にコマンドが適用されます。セレクタがない場合、コマンドはすべての行に適用されます。
セレクタは、行(数値ベース)または行グループ(正規表現基準)を選択するか、開始行(数値または正規表現基準)と終了行(数値または正規表現基準)の間の行を選択できます。
私たちの場合、セレクタは次のことを
/./,$
意味します。~から一致する最初の行を探します/./
(たとえば、1つ以上の文字が含まれています)到着ファイルの終わり($
ファイルの最後の行を表す行番号として使用されます)。これは無効になるため、
!
コマンドはファイルの先頭から最初の行が一致する前の行まで適用されます/./
。このコマンドは
d
選択した行を削除します。