如何通过将行号作为变量来删除一行?

Ano*_*ist 5 bash shell

我想通过将数字作为变量传递来删除文档的一行,如下所示:

ERR=`set of bash commands` ;  sed '${ERR}d' file
Run Code Online (Sandbox Code Playgroud)

但是单引号中的上述sed命令不起作用.那么如何实现这个任务呢?

jay*_*ngh 8

对于像这样的给定文件

$ cat file
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

以及包含行号的变量

$ ERR=5
Run Code Online (Sandbox Code Playgroud)

使用sed:

使用双引号允许变量进行插值.注意使用花括号sed来区分变量和d标志.在输出行号5不再是打印机.

$ sed "${ERR}d" file
1
2
3
4
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)

使用awk:

NR存储给定文件的行号.将shell变量传递给awkusing -v选项,我们创建一个awk名为的变量no.使用NR不等于我们awk变量的条件,我们告诉awk打印除了我们不想打印的行号之外的所有内容.

$ awk -v no="$ERR" 'NR!=no' file
1
2
3
4
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)