【问题标题】:How to match and remove the content preceding it from a file in unix [closed]如何从unix中的文件中匹配和删除其前面的内容[关闭]
【发布时间】:2015-09-01 12:08:33
【问题描述】:

我有一个 mysql 转储文件,我想使用 sed/perl 在“-- 视图 view_oss_user 的最终视图结构”之后删除文件的内容。 输入文件是这样的: 内容:

rom `target` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `view_oss_user`
--

/*!50001 DROP VIEW IF EXISTS `view_oss_user`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = latin1 */;
/*!50001 SET character_set_results     = latin1 */;

输出应该如下所示:

rom `target` */;
    /*!50001 SET character_set_client      = @saved_cs_client */;
    /*!50001 SET character_set_results     = @saved_cs_results */;
    /*!50001 SET collation_connection      = @saved_col_connection */;

    --

【问题讨论】:

  • 这里不清楚你想要什么。提供更清晰的输入样本、期望的输出,当然还有你迄今为止尝试过的内容。
  • 请出示您的代码并描述您遇到的问题

标签: mysql perl sed solaris


【解决方案1】:

使用 GNU sed

sed -n '1,/-- Final view structure for view `view_oss_user`/p'

这将打印从 1 到找到模式的行,其他行不会打印

或者如果你想排除模式线,那么

sed -n '1,/-- Final view structure for view `view_oss_user`/p' | sed '$d'

【讨论】:

  • 我应该如何将文件作为输入。我试过:cat /tmp/caa_dump.sql | sed -n '1,/-- 视图 view_oss_user/p' 的最终视图结构 > /tmp/new_test.sql 但它仍在打印整个内容
  • 看起来不错,检查输入的图案(一个字符可以炸掉它)。如果您知道该行在哪里,请打印以确保
  • 但你也可以使用 sed -n '1,/pattern/p' outputfile
【解决方案2】:
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @new_dump;
my $flag = 0;

while(<DATA>)
{
   if ( m/-- Final view structure for view `view_oss_user`/ )
   {
      $flag++;
   }
   push @new_dump, $_ unless $flag > 0;
}

print Dumper( \@new_dump );

__DATA__
rom `target` */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;

--
-- Final view structure for view `view_oss_user`
--

/*!50001 DROP VIEW IF EXISTS `view_oss_user`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = latin1 */;
/*!50001 SET character_set_results     = latin1 */;

运行它:

 ./perl 
$VAR1 = [
          'rom `target` */;
',
          '/*!50001 SET character_set_client      = @saved_cs_client */;
',
          '/*!50001 SET character_set_results     = @saved_cs_results */;
',
          '/*!50001 SET collation_connection      = @saved_col_connection */;
',
          '
',
          '--
'
        ];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2012-06-02
    • 2017-06-09
    • 2010-10-23
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    相关资源
    最近更新 更多