如何用sed删除第n行的最后n个字符?

Cur*_*Sam 0 awk sed

Ubuntu 16.04
Bash 4.4

我想删除第 n 行的最后 n 个字符。这是一个简单的文件,每行的最后 4 个字符是数字 4。

root@0o0o0o0o0 ~/.ssh # cat remove.txt
00000000004444
55555555555555555555555554444
222222222222222224444
000033334444
111114444
Run Code Online (Sandbox Code Playgroud)

要从我可以执行的每一行中删除最后 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
Run Code Online (Sandbox Code Playgroud)

但是,如果我想从第 4 行中删除最后 4 个字符,删除 3,那么文件将如下所示:

0000000000
5555555555555555555555555
22222222222222222
0000
11111
Run Code Online (Sandbox Code Playgroud)

Cyr*_*rus 5

使用 GNU sed:

sed -i 's/....$//; 4s/....$//' file
Run Code Online (Sandbox Code Playgroud)

4s/....$// 将搜索和替换限制为第 4 行。


见:man sedinfo sed

  • 或者 `sed -Ei 's/.{4}$//; 4s/.{4}$//' file` 如果有很多字符需要删除。这里实际上没有意义,因为命令更长。 (3认同)