このコマンドが何をしているのかを知る必要があります。
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
良いかもしれません。