【问题标题】:shell command delete line in text file with specific text in lineshell命令删除文本文件中的行,其中包含特定的文本
【发布时间】:2014-12-23 19:26:55
【问题描述】:

在寻找从包含特定字符串的文本文件中删除一行(或多行)的命令时。 例如 我有一个文本文件如下

Sat 21-12-2014,10.21,78%
Sat 21-12-2014,11.21,60%
Sun 22-12-2014,09.09,21%

我想删除所有包含“21-12-2014”的行。 我找不到可行的解决方案。

【问题讨论】:

  • sed、grep、awk 都这样做。你尝试了什么?
  • grep -v 21-12-2014 filename.txt? awk '! /21-12-2014/' filename.txt? sed -e '/21-12-2014/d' < filename.txt? Python 或 Perl 同样能够简单地做到这一点,并且可能还有许多其他解决方案......

标签: linux shell command


【解决方案1】:

根据 @twalberg 的说法,这个问题还有另外三个替代解决方案,我正在解释如下,供未来读者阅读该问题以获得更多通用解决方案:

使用grep 命令

grep -v 21-12-2014 filename.txt

解释:

-v 用于查找不匹配的行

使用awk 命令

awk '! /21-12-2014/' filename.txt

解释:

! 表示它将打印包含匹配字符串的所有其他行。这不是运营商表示无知。

使用sed 命令

sed -e '/21-12-2014/d' < filename.txt

解释:

-e 表示要执行的脚本正则表达式

d 表示删除任何匹配项

&lt; 正在将输入文件内容重定向到命令

【讨论】:

    【解决方案2】:

    尝试这样做:

    sed -i.bak '/21-12-2014/d' *
    

    一点解释:

    • sed :主命令行,将鼠标指针放在
    • -i.bak:替换文件就地并在.bak文件中进行备份
    • //
    • d 表示:删除

    【讨论】:

    • 此外,删除字符串,而不是行。你需要d 命令。
    • 人造卫星。我将如何包含“和”表达式。所以我想删除 21-12-2014 AND 60% 的所有行?
    • sed -i.bak '/21-12-2014.*60%/d' * 也许是时候学习正则表达式并了解其中涉及的内容了?
    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多