2012-06-06 3 views
3

Формат вывода тот же, за исключением того, что при использовании python вывод добавляет новую строку между каждой строкой. Любая идея, почему и как я могу это сделать с помощью sed?sed replace versus python replace

sed 's:\x01: | :g' 

01.06.2012 07:51:55.135 | 3732 | INFO | xxx | 8=FIX.4.2 | 9=157 | 35=V | 56=xxx | 49=xxx | 52=20120601-07:51:54 | 34=40 | 262=VMD1338537114945 | 263=1 | 264=0 | 265=1 | 
01.06.2012 07:51:55.135 | 3732 | INFO | xxx | 8=FIX.4.2 | 9=157 | 35=V | 56=xxx | 49=xxx | 52=20120601-07:51:54 | 34=41 | 262=VLT1338537114945 | 263=1 | 264=1 | 265=1 | 

for line in sys.stdin: 
    print line.replace("\01", " | ") 


01.06.2012 07:51:55.135 | 3732 | INFO | xxx | 8=FIX.4.2 | 9=157 | 35=V | 56=xxx | 49=xxx | 52=20120601-07:51:54 | 34=40 | 262=VMD1338537114945 | 263=1 | 264=0 | 265=1 | 

01.06.2012 07:51:55.135 | 3732 | INFO | xxx | 8=FIX.4.2 | 9=157 | 35=V | 56=xxx | 49=xxx | 52=20120601-07:51:54 | 34=41 | 262=VLT1338537114945 | 263=1 | 264=1 | 265=1 | 
+0

Не могли бы вы разместить входной файл, чтобы у нас было с чем поиграть? – mgilson

+0

@mgilson Это не должно быть трудным для производства; возьмите вывод, который он опубликовал, и запустите его через 'sed 's/|/\ x01/g ' –

ответ

2

Добавить вторую замену, которая заменяет конец строки символом новой строки: s/$/\n/. Поскольку у вас есть две модели сейчас, вам нужно использовать -e:

sed -e 's:\x01: | :g' -e 's/$/\n/' 
+0

Ahh right - Теперь я помню, почему я обычно использую '-e' с sed. ;) (+1) – mgilson

+0

Это работало только тогда, когда я добавил a/g в конце второй команды. – user1440188

+0

@ user1440188 Это не должно иметь значения; 'g' позволяет шаблону совместить несколько раз в одной строке - есть только один конец строки для соответствия –

0

печать добавляет новую строку попробовать это вместо

sys.stdout.write(line.replace("\01"," | ")) 
+0

Я думаю, что пользователь хочет использовать новую строку с помощью sed - не способ подавить ее – mgilson

+0

oh whoops ... хе жалко неправильно прочитал вопрос и не уверен, как это сделать с sed :( –

+0

sed -e 's: \ x01: |: g' -e 's: $: \ n: g' работал! Мне нужен/g, я не получал никакого вывода без него. – user1440188

2

Я не sed гуру, но вы можете добавить символ новой строки в конце каждой строки в СЭД, используя следующие:

sed -e 's/$/\n/g' 

Это работает, потому что $ соответствует концу строки. Обратите внимание, что вы можете ввести несколько команд sed вместе с -e (как указал Майкл Мрожек - см. man sed для получения дополнительной информации).

+0

полная команда будет: 'sed 's: \ x01: |: g' | sed -e 's/$/\ n'' –

+0

Нет необходимости в глобальном указателе'/g', потому что будет только одна замена за line. Примечание: я никогда не использовал sed. –

+0

@StevenRumbalski - Да, это будет сделано, хотя я не публиковал это, потому что, зная 'sed', вы можете пр. obably сделать все это за один проход через файл. И, '/ g', вероятно, не нужно. Я удалю его. – mgilson

1

Это может работать для вас:

sed '/\x01/{s// | /g;G}' file 

Или если вы просто хотите, чтобы добавить новую строку в каждой строке:

sed G file