Как удалить разделитель поля, который заканчивался на каждой последней строке?

Если вы используете zsh, вы можете просто назначить содержимое такого файла:

p="`cat file_to_be_read`"
0
21.08.2017, 15:24
2 ответа

Использованиеsed:

sed 's/,*$//' infile

это будет соответствовать нулю или более запятым в конце каждой строки. В некоторых реализациях sedвы можете указать sedсопоставить один или несколько в конце с:

sed 's/,\+$//' infile

(переносимым/стандартным эквивалентом является ,\{1,\}, так что вы можете также использовать ,,*или ,*, которые сделают то же самое ).

Или с GNU grepили совместимым:

grep -o '.*[^,]'

Это напечатает только -oвсе, пока последняя не -запятая (будет иметь побочный эффект удаления пустых строк, хотя ).

Или с GNU awkилиmawk:

awk '1' RS=',*\n'  #or
awk '1' RS=',+\n'

Это определяет R оператор записи S как регулярное выражение из,*\n(ноль запятых или,+\n(одну или несколько запятых )до \newline.

В 1есть просто всегда истинное условие, которое приводит к печати записей и игнорированию RS .

Или вperl:

perl -pe 's/,*$//' #or
perl -pe 's/,+$//' 
3
28.01.2020, 02:19
$ sed 's/,,*$//' input

Это заменит все запятые в конце строки ничем (они будут удалены ).

,,*$будет соответствовать одной или нескольким запятым в конце строки (буквально «одна запятая, а затем ноль запятых или более» ).

Другой способ сделать это состоит в том, чтобы исправить то, что производит данные так, чтобы оно не выводило пустые поля.

1
28.01.2020, 02:19

Теги

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