对命令感到困惑: sed '/^#/d' ~/.profile

use*_*419 3 linux sed putty awk text-processing

我需要知道这个命令的作用。

sed '/^#/d' ~/.profile
Run Code Online (Sandbox Code Playgroud)

该命令给我的输出是这样的:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi
Run Code Online (Sandbox Code Playgroud)

我知道这个命令:

sed '/^$/d' file.txt
Run Code Online (Sandbox Code Playgroud)

意思是删除 中的空白行file.txt

我知道这#可能意味着命令或注释的结束。

我知道$表示命令开始。

具体命令是什么

sed '/^#/d' ~/.profile
Run Code Online (Sandbox Code Playgroud)

做?

Kus*_*nda 6

命令sed

sed '/^#/d' ~/.profile
Run Code Online (Sandbox Code Playgroud)

将删除从文件的一行开头开始的所有 shell 注释~/.profile,例如以下两行的第一行,但不是第二行:

# comment
  # indented comment
Run Code Online (Sandbox Code Playgroud)

#它通过尝试在行的开头 ( )进行匹配来实现此目的^,并将删除 ( d) 任何匹配的行。

要从 shell 脚本中删除缩进注释,请使用

sed '/^[[:blank:]]*#/d' file
Run Code Online (Sandbox Code Playgroud)

[[:blank:]]将匹配空格字符和水平制表符。


$仅表示“命令的开始”,因为它是 shell 使用的常见提示符,提示您在命令行上键入某些内容。

#是在 shell 中引入注释的字符。sed除了匹配#输入1中的 a 之外,它在脚本中没有任何作用。我从未见过它用来表示“命令结束”。


1如果在命令之间使用,该角色也会在脚本#中引入注释。sed