Удалите только подарок запятых в двойных кавычках

Когда Вы echo $a, оболочка делает "разделение слова", и весь значительный пробел потерян.

Попробовать echo "$a" с двойными кавычками.

Заключение в кавычки также гарантирует, что расширение имени файла не происходит.

См. http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions

10
02.05.2017, 02:03
4 ответа
[1120511]Это (адаптировано из [1121118]здесь[1121119]) должно делать то, что вам нужно, хотя @rici's Perl один гораздо проще:[12250]Объяснение[12251]:a[1121345] : определите метку с именем [1121346]a[1121347]. [12252]s/(("[0-9,]*",?)*"[0-9,]*),/\1/[1121349] : эту нужно разбить. [12253] Прежде всего, используя эту конструкцию : [1121448](foo(bar))[1121449], [1121450] \1[1121451] будет [1121452]foobar[1121453] и [1121454]\2[1121455] будет [1121456]bar[1121457]. [12254]"[0-9,]*",?[1121459] : соответствовать 0 или более из [1121460]0-9[1121461] или [1121462],[1121463], а затем 0 или 1 [1121464],[1121465].[12255]("[0-9,]*",]? )*[1121467] : соответствуют 0 или более из вышеперечисленных.[12256]"[0-9,]*[1121469] : соответствуют 0 или более из [1121470]0-9[1121471] или [1121472],[1121473], которые следуют сразу за [1121474]"[12257]ta;[1121353] : возвращаются к метке [1121354]a[1121355] и запускают снова [1121356], если[1121357] замена прошла успешно. [12258]s/""/","/g;[1121359] : постобработка. Замените [1121360]"[1121361] на [1121362]","[1121363]. [12259]s/"([0-9]*)",?/\1,/g[1121365] : удалите все кавычки вокруг чисел.[12260]Это может быть проще понять на другом примере:[12261]Итак, хотя вы можете найти число, которое находится сразу после кавычки и за которым следует запятая и другое число, соедините эти два числа вместе и повторите процесс до тех пор, пока это больше не будет невозможно. [12262]На данный момент я считаю полезным упомянуть цитату из [1121130]info sed[1121131], которая появляется в разделе, описывающем расширенные функции, такие как метка, используемая выше (спасибо, что нашли if @Braiam):[12263]В большинстве случаев, использование этих команд указывает на то, что вы, вероятно, лучше программировать на что-нибудь вроде "ястреба" или Perl. [12264]
7
27.01.2020, 20:00
[1120525] Если perl в порядке, то вот короткий (и, вероятно, быстрый, если не обязательно простой :) ) способ сделать это:[12265]Флаг [1121134]e[1121135] для оператора [1121136]s:::[1121137] (что является просто другим способом записи [1121138]s///[1121139]) приводит к тому, что замена будет рассматриваться как выражение, которое вычисляется каждый раз. Это выражение берет захват [1121140]1[1121141] из регекса (который уже пропускает кавычки) и переводит ([1121142]y///[1121143], который также может быть записан как [1121144]tr///[1121145]), удаляя ([1121146]/d[1121147]) все запятые. Флаг [1121148]r[1121149] к [1121150]y[1121151] необходим для того, чтобы получить значение, которое будет переводить строку, а не считать переводы.[12266] Для тех, кто каким-то образом чувствует себя запятнанным perl, вот питоновый эквивалент. Python на самом деле не является оболочкой-однолинейным инструментом, но иногда его можно обмануть в сотрудничестве. Следующее можно записать как одну строку (в отличие от циклов [1121152]для[1121153], чего быть не может), но горизонтальная прокрутка делает его (даже больше) нечитаемым:[12267]
10
27.01.2020, 20:00
[119571] Для данных CSV я бы использовал язык с реальным парсером CSV. Например, с Ruby:[12181]
6
27.01.2020, 20:00

Цитата

Привет, вот код Python для замены запятых на двойные кавычки, запятые заменены с вертикальной чертой (|)

Этот код Python предназначен для замены запятых, заключенных в двойные кавычки

, например: x, y, z, 1,2, «r, e, t, y», h, 8,5,6

, если заменить на Pipe x, y, z, 1,2, "r | e | t | y", h, 8,5,6

, если заменить на null x, y, z, 1,2, "rety", h, 8,5,6

writingFile = open('FileToWrite', 'w')
with open('FileToRead') as f:

    while True:

        c = f.read(1)
        if not c:
            print ("End of file")
            break
        print ("Read a character:", c)


        if c=='"':
            writingFile.write(c) 
            c = f.read(1)
            while c != '"':
                if c== ',':
                    c= '|'
                writingFile.write(c)
                c = f.read(1)


        writingFile.write(c)


writingFile.close()
0
27.01.2020, 20:00

Теги

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