web-dev-qa-db-ja.com

コマンドについて混乱しています: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

しますか?

2
user82419

sedコマンドライン

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

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

# comment
  # indented comment

これは、行の先頭(#)で^を一致させようとすることでこれを行い、一致する行をすべて削除(d)します。

シェルスクリプトからインデントされたコメントも削除するには、

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

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


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

#は、シェルでコメントを紹介する文字です。 sedスクリプトでは、入力の#を照合する以外の目的はありません。1。 「コマンドの終わり」を表すために使用されるのを見たことがありません。


1 コマンド間で使用される場合、#文字はsedスクリプトにもコメントを導入します。

4
Kusalananda

/^#/は、(^)が#で始まる行に一致します。 dはそれらを削除します。 sedのデフォルトのアクションは、行を印刷することです(-nが指定されていない場合)。したがって、他のすべてが印刷されます。

#は、コマンドまたはコメントの終わりを意味する場合があることを知っています。

$はコマンドの開始を示します。

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

コメント文字として#を使用する多くのファイルでは、コマンドの後に使用したり、行の先頭に直接使用したりできないことに注意してください。例の出力に残っているコメントのように、字下げすることができます。

/^ *#/d(または/^[ \t]*#/d)のようなものは、インデントされたコメントも削除するという点で優れているかもしれません。

2
ilkkachu