我需要知道这个命令的作用。
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
将删除从文件的一行开头开始的所有 shell 注释~/.profile
,例如以下两行的第一行,但不是第二行:
# comment
# indented comment
它通过尝试#
在行的开头 ( ^
) 进行匹配来实现此目的,并将删除 ( d
) 任何匹配的行。
要从 shell 脚本中删除缩进注释,请使用
sed '/^[[:blank:]]*#/d' file
[[:blank:]]
将匹配空格字符和水平制表符。
$
仅表示“命令的开始”,因为它是 shell 使用的常见提示符,提示您在命令行上键入某些内容。
#
是在 shell 中引入注释的字符。sed
除了匹配#
输入1中的 a 之外,它在脚本中没有任何作用。我从未见过它用来表示“命令结束”。
1如果在命令之间使用,该#
角色也会在脚本中引入注释。sed
答案2
/^#/
匹配^
以 ( )开头的行#
。d
删除它们。默认操作sed
是打印该行(除非-n
给出),因此会打印其他任何内容。
我知道这
#
可能意味着命令或注释的结束。我知道
$
表示命令开始。
嗯,不。在正则表达式中,^
标记字符串(或行)的开始、$
结束。#
用作注释字符,因此通常位于行的开头。
请注意,许多用作#
注释字符的文件允许在命令之后使用它,否则不能直接在行的开头使用。它可以缩进,如示例输出中剩余的注释所示。
像/^ *#/d
(或/^[ \t]*#/d
) 这样的东西可能会更好,因为它也会删除缩进的注释。