2

sms;配信;"+99999999999";"";"";"2012.06.23 09:21";"";"xxxxxxxxxxxx xxxxxxxx、
xxxxxxxxxxxx
xxxxxxxxxxxx
xxxxxxxxxxxx"

「sms;deliver;」で始まらない行が必要です 前の行に追加されます。つまり、そのような行を取得するには:

sms;配信;"+99999999999";"";"";"2012.06.23 09:21";"";"xxxxxxxxxxxx xxxxxxxx、xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx"

^ 一行です。また、xxxxx(コンテンツ) 部分の二重引用符を削除/置換すると便利です。

sms;配信;"+99999999999";"";"";"2012.06.23 09:21";"";"xxxxxxxxxxxx xxxxxxxx、xxxxxxxxxxxx xxxxxxxxxxxx "xxxx"xxxxxxxx"

したがって、上記の行は次のように変換されます (二重引用符は単一引用符に変換されます)。

sms;配信;"+99999999999";"";"";"2012.06.23 09:21";"";"xxxxxxxxxxxx xxxxxxxx、xxxxxxxxxxxx xxxxxxxxxxxx 'xxxx'xxxxxxxx"

4

2 に答える 2

3

次のsedコマンドは、必要なことを行うようです(編集:sed引用符をフィルタリングするための最初の短いコマンド):

sed '/^sms;deliver;/!'"y/\"/'/" yourfile | sed -n '/^sms;deliver;/!b;:r;${p;b};N;/\nsms;deliver;/!{s/\n//;br};P;s/.*\n//;br'

簡単な説明:

sed -n '# not print by default
/^sms;deliver;/!b # if line not starting with the pattern, goto end
:r #label r
${p;b} # if last line, print & exit
N # read new line, append to pattern space
/\nsms;deliver;/!{s/\n//;br} # if appended line doesn't start with pattern,
                             # remove newline & goto r
P # print everything up to the newline
s/.*\n//;br # remove what was just printed, goto r'

最初のは と一直線に並んでいない場合にのみ にsed変わります"'sms;delivered;

于 2012-06-23T14:32:51.587 に答える
2

これはあなたのために働くかもしれません:

sed ':a;$!N;/\nsms;deliver;/!s/\n//;ta;:b;s/\(;".*\)"\([^";]*\)"\([^";]*"\)$/\1'\''\2'\''\3/;tb;P;D' file

編集:

の問題のテスト データ":

echo 'sms;deliver;"+99999999999";"";"";"2012.06.23 09:21";"";"xxxxxxxxxxxxx xxxxxxxx, xxxxxxxxxxxx xxxxxxxxxxxx "xxxx"xxxxxxxx"' >/tmp/a
sed ':a;$!N;/\nsms;deliver;/!s/\n//;ta;:b;s/\(;".*\)"\([^";]*\)"\([^";]*"\)$/\1'\''\2'\''\3/;tb;P;D' /tmp/a
sms;deliver;"+99999999999";"";"";"2012.06.23 09:21";"";"xxxxxxxxxxxxx xxxxxxxx, xxxxxxxxxxxx xxxxxxxxxxxx 'xxxx'xxxxxxxx"
sed 's/xx/"&"/g' /tmp/a >/tmp/b
sed ':a;$!N;/\nsms;deliver;/!s/\n//;ta;:b;s/\(;".*\)"\([^";]*\)"\([^";]*"\)$/\1'\''\2'\''\3/;tb;P;D' /tmp/b
sms;deliver;"+99999999999";"";"";"2012.06.23 09:21";"";"'xx''xx''xx''xx''xx''xx'x 'xx''xx''xx''xx', 'xx''xx''xx''xx''xx''xx' 'xx''xx''xx''xx''xx''xx' ''xx''xx'''xx''xx''xx''xx'"
于 2012-06-23T14:43:00.367 に答える