Подтвердить что ты не робот

Вырезание последнего n символа в строке с помощью оболочки script

Как удалить все n символов из определенной строки с помощью сценариев оболочки,

ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,

Выход будет в следующем формате

ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
4b9b3361

Ответ 1

Чтобы ответить на заголовок вашего вопроса, указав сокращение последнего n символа в строке, вы можете использовать функцию извлечения подстроки в Bash.

[email protected]$ A="123456"
[email protected]$ echo ${A:0:-2}  # remove last 2 chars
1234

Однако на основе ваших примеров вы хотите удалить все конечные запятые, и в этом случае вы можете использовать sed 's/,*$//'.

[email protected]$ echo "ssl01:49188,ssl999999:49188,,,,," | sed 's/,*$//'
ssl01:49188,ssl999999:49188

или, для чисто решения Bash, вы можете использовать удаление подстроки:

[email protected]$ X="ssl01:49188,ssl999999:49188,,,,,"
[email protected]$ shopt -s extglob
[email protected]$ echo ${X%%+(,)}
ssl01:49188,ssl999999:49188

Я бы использовал подход sed, если преобразование должно быть применено к целому файлу, и подход удаления подстроки Bash, если целевая строка уже находится в переменной Bash.

Ответ 2

С sed:

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

Ответ 3

Я думаю, вам нужно удалить ненужные ,

sed 's/,,//g;s/\,$//g' your_file

испытываться:

> cat temp
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,
> sed 's/,,//g;s/\,$//g' temp
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
> 

Ответ 4

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

sed 's/,,*$//g' file