2016-10-20 3 views
1

Это регулярное выражение используется на ubuntu с sed '1p;/^\s/!d;/^\s*id/d'. Он оставляет первую строку нетронутой, удаляет пустые строки и все, которые не начинаются с '{пробел}' или начинаются с '{blank} id'. На mac он оставляет только первую строку. Как выглядит regexp на mac? Пример test.csvsed ubuntu vs mac regexp

id | code | color_code | 
-------+------+------------+ 
11A00B| 15 | 9129102 | 
11A00C| 16 | 9129103 | 
(2 rows) 

    id | code | color_code | 
-------+------+------------+ 
11B00B| 25 | 9129152 | 
11B00C| 36 | 9129162 | 
(2 rows) 

    id | code | color_code | 
-------+------+------------+ 
11C00B| 22 | 9129107 | 
11C00C| 9 | 9129108 | 
(2 rows) 

После того, как я называю sed -i '1p;/^\s/!d;/^\s*id/d' test.csv на убунту

id | code | color_code | 
11A00B| 15 | 9129102 | 
11A00C| 16 | 9129103 | 
11B00B| 25 | 9129152 | 
11B00C| 36 | 9129162 | 
11C00B| 22 | 9129107 | 
11C00C| 9 | 9129108 | 

на макинтош

id | code | color_code | 
+0

Гораздо лучше исправить это изменить программу, которая произвела эти таблицы, чтобы не украсить столы. Это похоже на дубликат http://stackoverflow.com/questions/9934264/how-to-hide-result-set-decoration-in-psql-output – tripleee

+0

У меня нет доступа к программе. Это третья сторона. – user1648825

+0

Это, конечно, похоже, что он звонит в Postgres за кулисами. Вы можете поэкспериментировать с оболочкой в ​​тень 'psql' или что-то подобное, но это уже далеко выходит за рамки вашего первоначального вопроса. – tripleee

ответ

4

Ubuntu использует GNU sed, в то время как OS X использует BSD sed. Быстрый ответ: \s - расширение GNU для распознавания пробелов; используйте вместо него [[:space:]], и ваша команда будет работать на обоих.

sed -i "bak" '1p;/^[[:space:]]/!d;/^[[:space:]]*id/d' test.csv 

(Другое отличие состоит в том, что BSD sed требует суффикс с опцией -i, в то время как это не является обязательным с GNU.)

+0

Спасибо. Именно то, что мне нужно. – user1648825

Смежные вопросы