Когда вы запускаете команду в bash
, она запоминает местоположение этого исполняемого файла, поэтому ему не нужно каждый раз заново искать в ПУТЬ
. Поэтому, если вы запустите исполняемый файл, а затем измените его местоположение, bash
по-прежнему будет пытаться использовать старое местоположение. Вы должны подтвердить это с помощью hash -t pip3
, который покажет старое местоположение.
Если вы запустите hash -d pip3
, он скажет bash забыть старое местоположение и найти новое при следующей попытке.
(генерировать вывод) | sed -e 's / "," / | / g' -e 's / ^ "//' -e 's /" $ //'
или
sed -e 's / "," / | / g '-e' s / ^ "// '-e' s /" $ // '$ file
Для трех выражений:
-e' s / "," / | / g '
= заменить все разделители ","
новым разделителем |
-e' s / ^ "// '
= удалить ведущий »
mark
-e 's / "$ //'
= удалить конечный конец строки "
mark
Это сохранит любые кавычки, которые встречаются в title, если они не соответствуют начальному шаблону разделителя ","
Как насчет
cat test.csv | sed 's / \ ", \" / | / g' | sed 's / \ "// g'
Предполагая, что данные в вашем файле такие же, как показано выше (я не принимаю во внимание угловые случаи). Но у меня все вышеперечисленное сработало.
Этот обрабатывает встроенные разделители строк:
$ cat /tmp/bla
"PRCD-15234","CDOC","12","JUN-20-2016 17:00:00","title, with commas, ","Y!##!"
"PRCD-99999","CDOC","1","Sep-26-2016 17:00:00","title without comma","Y!##!"
"PRCD-99999","CDOC","1","Sep-26-2016 17:00:00","embedded\",delimiters\",","Y!##!"
sed -E 's / "(([^"] * (\\ ")?) *) ", / \ 1 | / g; s /" | (([^ "] * (\\")?) *) "/ \ 1 / g '
→
PRCD-15234|CDOC|12|JUN-20-2016 17:00:00|title, with commas, |Y!##!
PRCD-99999|CDOC|1|Sep-26-2016 17:00:00|title without comma|Y!##!
PRCD-99999|CDOC|1|Sep-26-2016 17:00:00|embedded\",delimiters\",|Y!##!