3

リストに引用符を追加する必要があります。後でこのリストを mailman にインポートします。

私が持っているのは、次のようなリストです。

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

私が必要とするのは:

"SurName Name" email@host.foo

これはsedを使用して可能になると思いますが、その方法を想像できません。

4

5 に答える 5

2

これを試してください:

sed -r 's/^(.*) +(.*@.*)/"\1" \2/' file

また

sed -r 's/^(.*) +([^ ]+)$/"\1" \2/' file

ノート

このフォーム0 to Nでは、名前の部分にスペースを含めることができます。sedコマンドはそれを処理します

于 2013-03-01T08:14:52.797 に答える
1

最初の引用は簡単ですがs/^/"/、2 番目の引用は少しトリッキーですが、次のパターンで電子メール アドレスに固定できます。s/ *[^@ ]*@[^@]*$/"&/例:

sed 's/^/"/; s/ *[^@ ]*@[^@]*$/"&/' file

出力:

"SurName Name" email@host.foo
"otherSurName otherName" otheremail@host.bar
于 2013-03-01T08:15:04.823 に答える
1

ファイル全体がこのように並べられている場合は、単に使用できます sed -e 's/^\(.*\) \(.*\) \(.*\)$/"\1 \2" \3/'

于 2013-03-01T08:13:32.810 に答える
1

さらに別の sed オプション:

sed '{
s/^/"/
s/ \([^ ]*\)$/" \1/
}' inputFile

1行で同じこと:

sed 's/^/"/;s/ \([^ ]*\)$/" \1/' inputFile
于 2013-03-01T08:19:23.540 に答える
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

2 つの列のみのケースも処理したい場合は、次のようにします。

$ 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
于 2013-03-01T08:21:22.913 に答える