Как удалить последние n-ые символы из n-й строки с помощью sed? - PullRequest
0 голосов
/ 12 апреля 2020

Ubuntu 16.04
Bash 4.4

Я хочу удалить последние n-ые символы из n-й строки. Вот простой файл, и последние 4 символа в каждой строке - это число 4.

root@0o0o0o0o0 ~/.ssh # cat remove.txt
00000000004444
55555555555555555555555554444
222222222222222224444
000033334444
111114444

Чтобы удалить последние 4 символа из каждой строки, я могу выполнить sed -i 's/....$//' remove.txt

root@0o0o0o0o0 ~/.ssh # sed -i 's/....$//' remove.txt
root@0o0o0o0o0 ~/.ssh # cat remove.txt
0000000000
5555555555555555555555555
22222222222222222
00003333
11111

Но что если я захочу удалить последние 4 символа из 4-й строки, удалив 3, чтобы файл выглядел так:

0000000000
5555555555555555555555555
22222222222222222
0000
11111

Ответы [ 2 ]

5 голосов
/ 12 апреля 2020

С GNU sed:

sed -i 's/....$//; 4s/....$//' file

4s/....$// ограничивает поиск и заменяет 4-ю строку.


См .: man sed и info sed

4 голосов
/ 12 апреля 2020

Не могли бы вы попробовать следовать в awk. Написано и протестировано в GNU awk.

awk -v line="4" -v nofChar="4" '
{
  sub(".{"nofChar"}$","")
}
FNR==line{
  sub(".{"nofChar"}$","")
}
1
'  Input_file

Подробное объяснение:

awk -v line="4" -v nofChar="4" '   ##Starting awk program and setting line variable value, nofChar variable value here.
{
  sub(".{"nofChar"}$","")          ##Substituting last nofChar number of characters at last of the each line here.
}
FNR==line{                         ##Checking if this is same line which OP wants to do 2nd time substitution.
  sub(".{"nofChar"}$","")          ##Substituting last nofChar number of characters at last of the each line here.
}
1                                  ##Mentioning 1 will print edited/non-edited line.
'  Input_file                      ##Mentioning Input_file name here.


2-е решение: Если количество символов во всех строках отличается от указанного в строке c, попробуйте выполнить следующее. Нужно изменить значение переменной nofUsualChar.

awk -v line="4" -v nofChar="4" -v nofUsualChar="4" '
{
  sub(".{"nofUsualChar"}$","")
}
FNR==line{
  sub(".{"nofChar"}$","")
}
1
'  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...