我需要在列表中添加引号。我将在稍后将此列表导入mailman。
我的列表是这样的:
SurName Name email@host.foo
otherSurName otherName otheremail@host.bar
我需要的是:
"SurName Name" email@host.foo
我希望这可以使用sed,但无法想象如何。
答案 0 :(得分:2)
尝试这样做:
sed -r 's/^(.*) +(.*@.*)/"\1" \2/' file
或
sed -r 's/^(.*) +([^ ]+)$/"\1" \2/' file
此表单允许在名称部分中包含0 to N
个空格,sed
命令将关注该
答案 1 :(得分:1)
如果你的整个文件都是这样订购的,你可以简单地使用
sed -e 's/^\(.*\) \(.*\) \(.*\)$/"\1 \2" \3/'
答案 2 :(得分:1)
第一个引用很简单,s/^/"/
,第二个引用有点棘手,但您可以使用以下模式将其锚定到电子邮件地址:s/ *[^@ ]*@[^@]*$/"&/
,例如:
sed 's/^/"/; s/ *[^@ ]*@[^@]*$/"&/' file
输出:
"SurName Name" email@host.foo
"otherSurName otherName" otheremail@host.bar
答案 3 :(得分:1)
又一个sed选项:
sed '{
s/^/"/
s/ \([^ ]*\)$/" \1/
}' inputFile
同一条线:
sed 's/^/"/;s/ \([^ ]*\)$/" \1/' inputFile
答案 4 :(得分:1)
使用awk
你可以这样做:
awk '{$1="\""$1; $2=$2"\""}1' file
测试
$ awk '{$1="\""$1; $2=$2"\""}1' file
"SurName Name" email@host.foo
"otherSurName otherName" otheremail@host.bar
如果您还想处理只有两列的情况,请执行以下操作:
$ awk '{if (NF==2) $1="\""$1"\""; else {$1="\""$1; $2=$2"\""}}1' file
"SurName Name" email@host.foo
"otherSurName otherName" otheremail@host.bar
"thirdname" sdfff@sdff.go
或者如果知道只有2或3列你可以做得更短一些:
awk '{$1="\""$1;$(NF-1)=$(NF-1)"\""}1' file
如果你想处理没有名字的行,请执行以下操作:
awk '{if(NF>2){$1="\""$1; $2=$2"\""}}1' file
演示
$ awk '{if(NF>2){$1="\""$1; $2=$2"\""}}1' file
"SurName Name" email@host.foo
"otherSurName otherName" otheremail@host.bar
thirdname sdfff@sdff.go
sdfdf@sddf.su