Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bourne shell中指定行号处的文件中删除行_Shell_Unix_Sed - Fatal编程技术网

从bourne shell中指定行号处的文件中删除行

从bourne shell中指定行号处的文件中删除行,shell,unix,sed,Shell,Unix,Sed,我正在Bourne Shell中制作约会跟踪脚本,需要从文本文件中删除约会。如果我有行号,如何从文件中删除一行而不留下空白?该文件如下所示: 1:19:2013:Saturday:16.00:20.30:Poker 1:24:2013:Thursday:11.00:11.45:Project meeting 1:24:2013:Thursday:14.00:15.10:CSS Meeting 要删除第5行,请执行以下操作: sed -i '5d' file.txt 对于可变行号: s

我正在Bourne Shell中制作约会跟踪脚本,需要从文本文件中删除约会。如果我有行号,如何从文件中删除一行而不留下空白?该文件如下所示:

1:19:2013:Saturday:16.00:20.30:Poker  
1:24:2013:Thursday:11.00:11.45:Project meeting  
1:24:2013:Thursday:14.00:15.10:CSS Meeting
要删除第5行,请执行以下操作:

sed -i '5d' file.txt
对于可变行号:

sed -i "${line}d" file.txt
sed -i '3d' input
如果
-i
选项在您的sed版本中不可用,您可以使用临时文件模拟它:

sed "${line}d" file.txt > file.tmp && mv file.tmp file.txt

这里有一个使用awk的快捷方法:

lineToDelete=$1
awk "NR != $lineToDelete"
按任命(行)编号删除:

按名称删除:

sed -i '/:Poker/d' input
如果就地(
-i
)选项在您的系统上不起作用,您可以执行以下操作:

sed '/:Poker/d' input > input.tmp && mv input.tmp input

POSIX sed不支持sed-i。因为我们在这里使用的是Bourne,所以有可能这不是Linux。例如,它在Solaris/usr/bin/sed中不起作用。这不会从文件中删除该行。它将文件打印到标准输出,但此行除外。在MacOS X上,i需要一个参数作为备份文件扩展名。您可以使用空字符串省略它,以获得与所需相同的行为:
sed-i”“'5d'file.txt
,在我的系统上,处理大文件时,
sed
看起来比
head
tail
的简单组合慢一个数量级:下面是一个没有就地模式的更快方法的示例:
delete-line(){local filename=“$1”;local lineNum=“$2”;head-n$((lineNum-1))“$filename”;tail+$((lineNum+1))“$filename”}