Ran*_*han 11 grep sed awk text-processing
我有一个包含如下数据的文件:
report aaaaaaaa
- ..
-th bbbbbbbbb
-to ccccccccc
.. --.Run Code Online (Sandbox Code Playgroud)
问题:我想删除任何不以以下字符串开头的行:
report
-th
-toRun Code Online (Sandbox Code Playgroud)
这意味着欲望输出将删除所有中间不需要的点和散列,看起来像这样:
report aaaaaaaa
-th bbbbbbbbb
-to cccccccccRun Code Online (Sandbox Code Playgroud)
sed// awk/ grepetc 任何可行的解决方案。
Jos*_* R. 15
使用sed修改文件的地点:
sed -i '/^\(report\|-t\(h\|o\)\)/!d' your_file
Run Code Online (Sandbox Code Playgroud)
这指示sed删除所有与模式不匹配的行。模式本身是^(行首),后跟任一report或-t后跟任一h或o。
您应该注意,这不是实际的就地修改:sed创建一个临时备份副本并用它覆盖原始文件。
如果您想sed保留原始文件的备份副本(如果文件包含关键数据,这可能是个好主意),请为-i交换机添加扩展名以创建备份文件:
sed -i'.bak' -e '/^\(report\|-t\(h\|o\)\)/!d' your_file
Run Code Online (Sandbox Code Playgroud)
将修改your_file并创建一个名为 的原始备份your_file.bak。
旁注
请不要误解我的意图或对此感到冒犯,但我注意到您有许多类似的正则表达式/文本处理相关问题。我建议您开始学习sed,awk并自学grep以帮助加快您的工作效率。再说一次,不要误会我的意思,我很乐意提供帮助(就像这里的大多数人一样);只是我认为您可以从日常使用的这些工具中受益匪浅。
只是为了证明这里的人有多大帮助,请在下面的评论中考虑@slm 的建议,并随时访问此聊天室提出问题。
pra*_*tri 10
您可以为此使用简单的 grep:
$ grep -e '^report\|^-th\|^-to' filename
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33980 次 |
| 最近记录: |