在文本文件中添加引号

时间:2013-03-01 08:02:57

标签: bash sed

我需要在列表中添加引号。我将在稍后将此列表导入mailman。

我的列表是这样的:

SurName Name email@host.foo
otherSurName otherName otheremail@host.bar

我需要的是:

"SurName Name" email@host.foo

我希望这可以使用sed,但无法想象如何。

5 个答案:

答案 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