Маючи такий файл CSV:
HEADER
"first, column"|"second "some random quotes" column"|"third ol' column"
FOOTER
і шукаємо результат типу:
HEADER
first, column|second "some random quotes" column|third ol' column
іншими словами, видаляючи "FOOTER", цитати на початку, в кінці та навколо |.
Поки цей код працює:
sed '/FOOTER/d' csv > csv1 | #remove FOOTER
sed 's/^\"//' csv1 > csv2 | #remove quote at the beginning
sed 's/\"$//' csv2 > csv3 | #remove quote at the end
sed 's/\"|\"/|/g' csv3 > csv4 #remove quotes around pipe
Як ви бачите, проблема створює 4 додаткових файли.
Ось ще одне рішення, яке має на меті не створювати зайві файли і робити те саме в одному сценарії. Це працює не дуже добре.
#!/bin/ksh
sed '/begin/, /end/ {
/FOOTER/d
s/^\"//
s/\"$//
s/\"|\"/|/g
}' csv > csv4
sed
не будете працювати з цим, лише з спрощеним csv. Використовуйте мову програмування з бібліотекою, яка може обробляти реальні файли CSV (Python / Perl / Ruby).