Что такое команда sed, чтобы исправить этот файл, поэтому последнее значение в каждой строке двойным кавычками

Кроме упомянутого пакета ncurses-doc, не забудьте установить примеры!

ncurses-examples

Они бесценны ... установлены на /usr/lib/ncurses/examples и лучше просматривается с помощью dwww

1
задан 26 November 2015 в 14:18

2 ответа

Не sed, но perl:

perl -F, -ane '($f1)=$F[1]=~/(.*)"/; $F[2]=~s/\n//g; print "$F[0],$f1,\"$F[2]\"\n";'

Объяснение:

perl -F, -ane читает входную строку и разбивает линию на , ($f1)=$F[1]=~/(.*)"/; удаляет " во втором столбце $F[2]=~s/\n//g; удаляет новую строку в конце print "$F[0],$f1,\"$F[2]\"\n"; записывает вывод и добавляет " к последнему значению [d8 ] Изменить - сокращенную версию (спасибо @kos):

perl -F, -lane '$F[1]=~s/"$//; print "$F[0],$F[1],\"$F[2]\"";'
3
ответ дан 23 May 2018 в 15:28

Похоже, что ваши поля задаются запятыми. Если это так, вы можете сделать это в sed:

sed -i -r 's/",([^,]*)$/,"\1"/' file

Или в Perl:

perl  -i -lpe 's/",([^,]*)$/,"\1"/' file

В обоих случаях регулярное выражение просто ищет запятую, затем 0 или более не запятыми до конца строки. Скобки фиксируют последние поля, которые мы теперь можем назвать \1 (или $1 в perl). Затем он заменяется собой внутри двойных кавычек. [F8] предназначен для редактирования файла на месте, изменения внесены в исходный файл.

Вы также можете использовать awk:

awk -F, -vOFS=, '{sub(/"/,"",$(NF-1)); $NF="\""$NF"\""}1;' file

Или, если ваша версия поддерживает его:

awk -iinplace -F, -vOFS=, '{sub(/"/,"",$(NF-1)); $NF="\""$NF"\""}1;' file 
3
ответ дан 23 May 2018 в 15:28
  • 1
    OP хочет исключить " в конце второго поля. – muru 26 November 2015 в 15:10
  • 2
    @muru спасибо, я пропустил это. Я также пропустил, увидев ваш ответ, прежде чем публиковать мой. Добавлен что-то большее, чтобы отличить. – terdon♦ 26 November 2015 в 17:10

Другие вопросы по тегам:

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