如何使用Linux终端从文件中间删除行

时间:2020-01-09 10:39:36  来源:igfitidea点击:

当我们管理自己的服务器时,最终需要半定期执行的一件事是从文件中间提取内容。也许这是一个日志文件,或者我们需要像我一样从MySQL备份文件的中间添加一个表。

要弄清楚行号,可以使用一个简单的grep -n命令来完成(-n参数输出行号)。这样就很容易弄清楚我需要提取的内容。

grep -n wp_posts theitroaddb010114.bak | more

结果是这样,它在输出的左侧显示了行号。将所有内容添加到更多内容中可确保我们无需滚动就可以看到第一行。现在我们已经有了行号,也可能以行号结尾。

4160:-- Table structure for table `wp_posts`
4163:DROP TABLE IF EXISTS `wp_posts`;
4166:CREATE TABLE `wp_posts` (
4203:-- Dumping data for table `wp_posts`
4206:LOCK TABLES `wp_posts` WRITE;
4207:/*!40000 ALTER TABLE `wp_posts` DISABLE KEYS */;
4208:INSERT INTO `wp_posts` VALUES (1,2,'2006-09-11 05:07:23','2006-09-11

当然,我们可以将grep的输出传递到另一个文件中,如下所示:

grep keyword filename.txt > outputfile

就我而言,那是不希望的,因为由于某种原因我无法导入结果备份。因此,我找到了另一种使用sed提取行的方法,该方法确实有效。

sed -n '4160,4209p' theitroaddb0101140201.bak > outputfile

基本上,语法是这样的,请确保使用-n参数,并在第二行号之后包含p。

sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' filename > outputfilename

我们可以通过其他方法在文件中间提取特定行吗?我们可以将head命令与+ number参数一起使用以仅读取文件的前x行,然后使用tail提取这些行。不是最好的选择,很多开销。更简单的选择?我们可以使用split命令将文件直接转换为所需行号的多个文件,然后使用头或者尾提取行。或者,我们可以只使用sed。