【问题标题】:Remove the lines starting with a character in shell删除shell中以字符开头的行
【发布时间】:2017-06-09 11:02:49
【问题描述】:

我的数据集为:

file.txt
de
fds
fds
a
sa
1
2
3
1
}

我想删除所有以字符或特殊字符开头的行。所以我的输出是:

out.txt
1
2
3
1

我可以使用 'sed' 手动执行此操作,但我正在为此寻找合适的命令。

我的代码:

sed -i '/d//g' file.txt
sed -i '/f//g' file.txt
sed -i '/a//g' file.txt
sed -i '/s//g' file.txt
sed -i '/}//g' file.txt

【问题讨论】:

  • 糟糕,您忘记发布代码了! StackOverflow 旨在帮助人们修复他们的代码。这不是免费的编码服务。任何代码都比没有代码好。元代码甚至可以展示您认为程序应该如何工作,即使您不知道如何编写它。
  • 感谢@ghoti 指出这一点。我已经添加了我的代码。
  • sed -n '/^[0-9]/p' file

标签: linux shell sed


【解决方案1】:

grep-E 选项一起用于正则表达式(或简称为egrep):

grep -E "^[0-9].*" file.txt

【讨论】:

  • 这个正则表达式不需要-E。它是 ERE 之外的 BRE。此外,您可能需要考虑默认使用单引号,除非您知道需要引用变量。只是一般的安全措施和良好的习惯。
  • 没错,最小的答案是“grep '^[0-9]' file.txt”。但是,我借此机会表明 grep 可以做的不止这些 ;)
  • @R.Saban .. 如果我需要保留负值,请建议我修改此脚本。我在这里问过这个问题stackoverflow.com/questions/45006897/…
【解决方案2】:

只保留以数字开头的行:

$ sed -i.bak -r '/^[0-9]/!d' filename

或删除以特定字符开头的行:

$ sed -i.bak -r '/^[dfas}]/d' filename

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多