仅当字符尚不存在时才将其添加到每行的开头

Sep*_*p A 3 sed regular-expression

给出仅包含一些由行分隔的用户名的文本文件示例:

@Alice 
@Bob 
Cindy 
Leon 
@Mark
Run Code Online (Sandbox Code Playgroud)

如何添加@到尚未包含该行的每一行的开头?

Sté*_*las 7

sed脚本中的语句有一个[address[,address]][!] action模式,其中address可以是行号或/regexp/,地址可以用!(not) 反转,所以在这里你可以写:

sed '/^@/! s/^/@/' < file
Run Code Online (Sandbox Code Playgroud)

将 a 添加@到还没有的行的开头。

地址是/^@/@行开头 ( ^) 之后的行),!将其反转,以便s/^/@/操作(s用 代替行开头@)仅在不匹配的行上运行。

您可以通过以下方式达到相同的效果:

sed 's/^@\{0,1\}/@/' < file
Run Code Online (Sandbox Code Playgroud)

@它将开头的0 或 1 替换为@. 与 ERE 相同:

sed -E 's/^@?/@/' < file
Run Code Online (Sandbox Code Playgroud)