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

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

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

@Alice 
@Bob 
Cindy 
Leon 
@Mark

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

答案1

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

sed '/^@/! s/^/@/' < file

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

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

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

sed 's/^@\{0,1\}/@/' < file

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

sed -E 's/^@?/@/' < file

相关内容