Удалить запятые в строке


10

Как мне удалить набор запятых в bash:

a,b,c,d,,,,
1,2,3,,,,

Желаемый результат:

a,b,c,d
1,2,3

Попробовал сделать это:

 grep "5628" test.csv | sed 's/,*$//g'

но это не работает Файл изначально пришел с машины Windows.


2
Вы уверены, что это не сработало? Какую полную команду вы выполняли?
15:00

Положительно. Это не так.
user2980702

Не могли бы вы указать точную команду ( sedпоказанная вами без имени файла действует как фильтр и не обрабатывает файл на месте )
roaima

grep "5628" test.csv | sed 's /, * $ // g'
user2980702

2
Если вам нужно использовать файл в * nix и вам не нужно иметь возможность копировать его обратно в Windows, в конечном итоге может быть проще конвертировать окончания строк из CR / LF в NL с dos2unixчем-то подобным ,
G-Man говорит: «Восстановите Монику»

Ответы:


13

Re команда, которую вы предоставили:

grep "5628" test.csv | sed 's/,*$//g'

Это выведет строки, соответствующие '5628' со всеми удаленными запятыми. Это не обновит файл test.csv.

Тем не менее, вы указали, что файл пришел с компьютера с Windows, поэтому окончание строки - CR / NL, а не просто NL. В результате в конце строки есть скрытый CR, и вам нужна командная строка:

grep "5628" test.csv | sed 's/,*\r*$//'

На самом деле, вы можете просто сделать это одной командой:

sed -n '/5628/s/,*\r*$//p' test.csv

Я не пытаюсь сделать на месте обновление. Просто нужен вывод без запятых
user2980702

Это сработало. Большое вам спасибо. Поэтому мы ищем несколько запятых (, *) перед возвратом каретки в конце файла (\ r * $). Я прав ?
user2980702

Параметр \r*учитывает ноль или более символов CR (поэтому он будет продолжать работать с производными файлами Unix / Linux). Я бы предпочел использовать \r?для обозначения одного необязательного CR, но я не мог вспомнить флаг, sedчтобы сказать ему использовать ERE на макушке головы. Я думаю, что это -rздесь не проверено. Это ,*ваше и соответствует нулю или более запятых.
Ройма

gне требуется в этом случае тер только один конец определяется$
NeronLeVelu

2
sed -n '/5628/ s/,*\r*$//p' test.csv

(не OP, который только просит удалить висячую кому) это позволяет избежать процесса обвязки, принимая непосредственно фильтр и преобразование

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.