Как убрать запятую в последней строке диапазона адресов sed? - PullRequest
1 голос
/ 21 апреля 2020

У меня есть файл, который содержит значение в каждой строке и заканчивается на ,. Я хочу удалить , в последней строке выбранного диапазона адресов. С помощью sed -n '1,3p' file | sed '$s/,$//' я могу добиться следующего, но есть ли более простой способ?

Пример:

'12345',
'45322',
'90456',
'67895',
...
'34552',

Ожидаемый результат:

'12345',
'45322',
'90456'

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

С GNU sed:

sed -n '1,3{ 3s/,$//;p }' file

Вывод:

'12345',
'45322',
'90456'

Недостаток: 3 необходимо вводить дважды.

1 голос
/ 21 апреля 2020

Просто запустите обе команды в одном sed вызове, который сначала удалит запятую:

$ cat input.txt
foo,
bar,
baz,
quux,
$ sed -n '3s/,$//; 1,3p; 3q' input.txt
foo,
bar,
baz

Обратите внимание, что для s/// используется тот же номер строки, что и для конца диапазона, чтобы print вместо $.

В качестве оптимизации это также происходит после печати последней строки диапазона вместо продолжения обработки остальной части файла (и ничего с этим не делать).

...