我想通过将数字作为变量传递来删除文档中的一行,如下所示:
ERR=`set of bash commands` ; sed '${ERR}d' file
但是上面单引号中的sed命令不起作用。那么如何实现这个任务呢?
axr492tv1#
对于给定的文件,如
$ cat file 1 2 3 4 5 6 7 8 9 10
和包含行号的变量,如
$ ERR=5
sed
使用双引号以允许变量进行插值。注意使用大括号以允许sed区分变量和d标志。在输出行号5中不再是打印机。
d
$ sed "${ERR}d" file 1 2 3 4 6 7 8 9 10
awk
NR存储给定文件的行号。使用-v选项将shell变量传递给awk,我们创建了一个名为no的awk变量。使用NR不等于awk变量的条件,我们告诉awk打印除了我们不想打印的行号之外的所有内容。
NR
-v
no
$ awk -v no="$ERR" 'NR!=no' file 1 2 3 4 6 7 8 9 10
pes8fvy92#
这是很好的(好,坏和丑陋-克林特伊斯特伍德,李货车克里夫和伊莱沃勒克):
good='1680790311' #the Good; bad=2 #the Bad; ugly=1 #the Ugly; deleteYesExists=$(grep -n "$good" userdb.tmp | cut -d':' -f1); if [[ $deleteYesExists > 0 ]];then sed -i "$deleteYesExists"d userdb.tmp;fi
还有:
if [[ $(grep -n "$good" userdb.tmp | cut -d':' -f1) = "$ugly" ]];then sed -i "$bad"d userdb.tmp;fi
2条答案
按热度按时间axr492tv1#
对于给定的文件,如
和包含行号的变量,如
使用
sed
:使用双引号以允许变量进行插值。注意使用大括号以允许
sed
区分变量和d
标志。在输出行号5中不再是打印机。使用
awk
:NR
存储给定文件的行号。使用-v
选项将shell变量传递给awk
,我们创建了一个名为no
的awk
变量。使用NR
不等于awk
变量的条件,我们告诉awk
打印除了我们不想打印的行号之外的所有内容。pes8fvy92#
这是很好的(好,坏和丑陋-克林特伊斯特伍德,李货车克里夫和伊莱沃勒克):
还有: