Как удалить двойные кавычки из файла, но не внутри двойных кавычек

Использование bash:
[[ $f =~ ^([^-]+)\ -\ ([^\.]+)\.(.*) ]] && 
  mv "$f" "${BASH_REMATCH[2]} - ${BASH_REMATCH[1]}.${BASH_REMATCH[3]}"

Здесь используется оператор проверки регулярного выражения bash = ~ , чтобы проверить, соответствует ли данное имя файла (в $ f ) шаблону: «все, кроме тире, за которым следует пробел, тире, пробел, за которым следует что угодно, кроме точки, за которой следует точка, за которой следует что-нибудь или ничего ". Если имя файла соответствует этому шаблону, совпадающие биты заключенных в скобки подразделов регулярного выражения назначаются элементам массива BASH_REMATCH.

Чтобы сделать это для каждого файла в определенной папке:

cd /to/that/folder
for f in *
do
  [ -f "$f" ] || continue
  [[ $f =~ ^([^-]+)\ -\ ([^\.]+)\.(.*) ]] && 
    mv "$f" "${BASH_REMATCH[2]} - ${BASH_REMATCH[1]}.${BASH_REMATCH[3]}"
done

Использование только расширений переменных, указанных в POSIX :

pre=${f%%.*}
ext=${f##*.}
mv "$f" "${pre##*- } - ${pre%% -*}.$ext"
1
22.08.2017, 19:34
2 ответа

Я бы порекомендовал использовать специальное программное обеспечение для работы с csv, хотя этот случай можно было бы решить простым sed, если в двойных кавычках нет запятых:

sed 's/^"//;s/",/,/g;s/,"/,/g;s/"$//' file
1
27.01.2020, 23:33

Короткоеsedрешение:

sed 's/^"\|"$//g; s/"*,"*/,/g;' file

Илиawkподход:

awk -F, '{ for(i=1;i<=NF;i++) gsub(/^"|"$/,"",$i) }1' OFS=',' file

Выходные данные (для обоих подходов):

ssl-server,ssl.server.truststore.type,jks
tez-env,enable_heap_"\n"dump,false
tez-env,heap_dump_location"\n"port,/tmp
tez-env,tez_user,tez
1
27.01.2020, 23:33

Теги

Похожие вопросы