コマンドの混乱: sed '/^#/d' ~/.profile

コマンドの混乱: sed '/^#/d' ~/.profile

このコマンドが何をしているのかを知る必要があります。

sed '/^#/d' ~/.profile

このコマンドが提供する出力は次のとおりです。

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

私は次のコマンドを知っています。

sed '/^$/d' file.txt

から空白行を削除することを意味しますfile.txt

私はこれが#コマンドやコメントの終わりを意味できることを知っています。

私は$それがコマンドが開始されることを意味することを知っています。

具体的なコマンドは何ですか?

sed '/^#/d' ~/.profile

する?

答え1

コマンドsedライン

sed '/^#/d' ~/.profile

~/.profile次の2行のうち、最初の行のように、ファイルの行の先頭から始まるすべてのシェルコメントを削除しますが、2行目は削除しません。

# comment
  # indented comment

これは#行の先頭( )で^一致を試み、d一致する行を削除()します。

シェルスクリプトからインデントされたコメントを削除するには、次のようにします。

sed '/^[[:blank:]]*#/d' file

[[:blank:]]スペース文字と水平タブ文字と一致します。


$コマンドラインに何かを入力するように指示するためにシェルが使用する一般的なプロンプトであるため、「コマンドの開始」を意味します。

#シェルでコメントを紹介する文字です。入力1sedでaを一致させる以外に、スクリプトに役割はありません。私はそれが「コマンドの終わり」を意味するのを見たことがありません。#


1この役割は、コマンド間で使用されている場合は#スクリプトにコメントを追加します。sed

答え2

/^#/^()で始まる行と一致します#d削除してください。デフォルトの動作はsedその行を印刷することであるため(-n指定されていない場合)、他の内容も印刷されます。

私はこれが#コマンドやコメントの終わりを意味できることを知っています。

私は$それがコマンドが開始されることを意味することを知っています。

まあ…いいえ。正規表現は^文字列(または行)の始まりと終わりを示します$#コメント文字として使用されるため、通常は行の先頭に使用されます。

コメント文字として使用される多くの#ファイルでは、コマンドの後に使用できますが、行の先頭には直接使用できません。出力例の残りのコメントに示すように、インデントが可能です。

/^ *#/dインデントされたコメントも削除されるので(または)などの方が/^[ \t]*#/d良いかもしれません。

関連情報