【问题标题】:Delete a line starting with particular String in all 3000 files在所有 3000 个文件中删除以特定字符串开头的行
【发布时间】:2016-05-01 18:42:49
【问题描述】:

我想删除 3000 个文本文件中的每一行。

我曾尝试使用 Notepad Plus,但它会为每个匹配行创建一个空白行。

示例文件内容:

SAMPLE TXT FILE
---------------------
phone number
address
IAM A DEFAULT
city
state
pincode
----------------

这里IAM A DEFAULT 出现在所有 3000 个文件中,并且只出现一次

【问题讨论】:

  • Perl,要删除的行总是相同的字符串。例如,我必须删除所有 3000 个文件中包含字符串“iam new to perl”的所有行
  • 然后:perl -n -i.before -e 'print unless /iam new to perl/;' *.txt。这将打印所有不包含“iam new to perl”的行,就地编辑文件(-i)并将旧文件保存为*.before-i.before)。
  • @krthk:请不要在回复时使用缩写的用户名:它会绕过 Stack Overflow 的通知系统。如果您使用的是 PC 系统,那么您可以点击@ 符号并开始输入您要回复的用户的姓名;点击选项卡将自动完成。像这样正确地将用户名添加到评论中会提醒他们作为收件箱中的增量。请尝试一下。遗憾的是,这在平板电脑和手机应用程序上不起作用,如果你想回复用户名中包含 Unicode 字符的人,除非你有一个花哨的键盘,否则你会被塞满
  • @Borodin 请不要这么苛刻。这是一个初学者,他不知道更好,Q也不错。经过一番审问,他告诉了要跳过哪些行。我认为他并不关心/确切地知道这些行是否有添加空格。
  • @PerlDog:我不是在争论;听到我的话被认为是严厉的,我很难过。谢谢你的夸奖——我会继续努力的

标签: perl awk sed grep notepad


【解决方案1】:

您没有谈论识别要处理的文件,而是假设您要从当前目录中的所有*.txt 文件中删除所有IAM A DEFAULT

这个 Perl 单行命令将为您完成这些工作。它还将每个原始文件(如abc.txt)保存为abc.txt.bak

perl -i.bak -lne 'print unless $_ eq "IAM A DEFAULT"' *.txt

希望对你有帮助

【讨论】:

    【解决方案2】:

    使用 GNU sed 和 GNU bash 4:

    shopt -s globstar nullglob
    sed -i '/^IAM A DEFAULT/d' **/*.txt
    

    【讨论】:

    • 嗨赛勒斯,谢谢。但是我如何对子文件夹中的所有 txt 文件执行相同的操作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2022-11-28
    • 2015-05-04
    • 2010-09-08
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多