Я работаю с .csv
выводом этого запроса данных SE, который выглядит следующим образом (только с 5022 записями):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(И у него есть ^M
окончания строки между [число] и "" заголовок ""). Мне нужно, чтобы это выглядело так:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
Я исправил это в определенном текстовом редакторе, который довольно легко останется безымянным, но я хотел создать скрипт, чтобы мне не приходилось делать его снова каждый раз при обновлении запроса, чтобы другие могли его использовать. Я использовал sed
...
Эта серия команд работает отлично (хотя вполне может быть неэффективной; это всего лишь метод проб и ошибок):
# Print the ^M and remove them, write to a new file:
cat -v QueryR* | sed 's/\^M//' > QueryNew
# remove all the other junk:
sed -i 's/{//' QueryNew
sed -i 's/}//' QueryNew
sed -i 's/""//g' QueryNew
sed -i 's/^"//' QueryNew
sed -i '/,/{N;/\n.*title:\s/{s/,\n.*title:\s/,\ /}}' QueryNew
sed -i 's/^\s\+//' QueryNew
sed -i '/^\s*$/d' QueryNew
sed -i 's/^id:\ //' QueryNew
sed -i 's/,\ /,/' QueryNew
sed -i 's/\\//g' QueryNew
Так почему бы и нет? Только ^M
и {}
удаляются, а все остальное еще есть.
#!/bin/bash
cat -v QueryR* | sed 's/\^M//' > QueryNew
sed -i '{
s/{//
s/}//
s/""//g
s/^"//
/,/{N;/\n.*title:\s/{s/,\n.*title:\s/,\ /}}
s/^\s\+//
/^\s*$/d
s/^id:\ //
s/,\ /,/
s/\\//g
}' QueryNew
Я уверен, что моя ошибка действительно очевидна ...
\r
.jq
разбит на первую строку, где поле заголовка имеет двоеточие (первая строка). Я до сих пор не знаю , почемуsed
меня ненавидит, но я убил некоторых из цитат и\r
в этой линии ,/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
и , наконец , она работает , как это . Большое спасибо ^ _ ^