apt-get install linux-headers-4.9.0-kali3-amd64
Последняя команда может завершиться ошибкой, если ваша система не полностью обновлена. Я использовал эту команду, и она была успешной:
apt-get install linux-headers-amd64
Вы можете использовать простую замену sed
для сопоставления строки, которая начинается с "
и содержит ли не встроенный "
внутри, и захватить эту группу до появления |
и затем сопоставьте вторую группу оттуда с концом "
. Просто распечатайте совпадающие группы, так как они не содержат символ |
sed 's/\("[^"]*\).* |\([^"]*"\)/\1\2/g'
У Ruby есть хорошая библиотека CSV, так что это может быть одна -строчка:
ruby -rcsv -e 'CSV.filter(col_sep: "|") {|row| row.each {|field| field.gsub!(/\| /, "")}}' file
Использование Perl (извините :запутанный код)
perl -pe 's/".*?"/ $& =~ tr[|][]dr /ge' file
Пояснение:
perl -pe proc
-применить proc
ко всем строкам s/RE/ f($&) /ge
-заменяет RE
результатомf(matching string)
tr[|][]dr
-переводит |
ничем (=удаляет)Используя csvformat
из CSVKit , сsed
:
$ csvformat -d '|' file | sed 's/| //' | csvformat -D '|'
abc|45|Do not replace in this|0.23
Первый вызов csvformat
изменяет разделитель CSV с |
на запятую. Канал в тексте (и пробел после него )можно удалить простым вызовом sed
. Затем мы снова вызываем csvformat
, чтобы изменить разделители обратно на |
.
Обратите внимание, что двойные кавычки не используются в окончательном выводе. Это потому, что они больше не нужны. Во-первых, они никогда не были частью фактических данных, а нужны были только для разграничения этого поля из-за используемого в нем конвейера (. Исходные данные были правильно цитируемым CSV-файлом ).
Вы хотите, чтобы поля в выводе заключались в кавычки,используйте -U1
с последним вызовом csvformat
. Это приведет к цитированию всех полей.