ed コマンド: 行 1 から最初の空行まで削除

ed コマンド: 行 1 から最初の空行まで削除

教科書でこのコードを見ましたが、本では1,/^[ ]*$/d 「1行目から最初の空白行まで削除」を意味すると言いました。各文字の具体的な意味は何ですか?

ed $1 << EOF
    1,/^[ ]*$/d
    w
    q
EOF

答え1

1,/.../最初の行から間のパターンに一致する行までの範囲を表します/

/^[ ]*$/[ ]*^行の先頭から最後まで、ゼロまたはスペースを含む行を見つけます。$
問題のコードが意図的なものなのか、本の正確なコピーなのかは不明です。単一のスペースの周りに括弧は必要ありません。おそらく、原作者は、文字クラスで置き換えることができる括弧の間にスペースとタブを望んでいたかもしれません[[:blank:]]

d行を削除するコマンドです。

wファイルの書き込み

qエディタの終了

このコマンドはed通過します。ここのドキュメント、で表されます<< EOF。この文字列は、下の他の4行とペアになっている半無意識の名前ですEOFEOF引用符がない場合は、EOF中間行のすべての変数が拡張されることを意味します。

ここで注意すべきもう1つのことは、例が引用されていないことです$1。 / scriptコマンドは、ed最初の位置引数(スクリプトまたは関数の引数)に対して実行されます。追加のスペース分割とファイル名の生成の影響を受ける。この主張は実際に引用されなければなりません。詳細については、次を参照してください。スペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?そしてbash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク

答え2

コマンドと入力

$1編集するファイルの名前で、EOF間の内容はすべてですed

ブローバイブローの説明1,/^[ ]*$/d

  • 1,行から始める1 この場合、検索文字列が最初に表示されるまで続きます。
  • /文字列を検索したいことを示します。
  • ^ファイルの行の先頭に一致させることを意味します。
  • [多くの文字を指定するという意味です。
  • ' '私たちはスペースを一致させたいです。通常、ここにはより多くの文字があります。
  • ]指定された文字を完成
  • *[]0個以上の空白(または間のすべての文字)を一致させようとします。
  • $ファイルの行末まで
  • /検索を閉じる
  • dこの行を削除

その後、次の行でw変更を記録してからq終了しますed

影響

ファイルの最初の行()が空の場合、または$1空白(タブなし)のみが削除されます。

関連情報