Bash - 删除所有以'P'开头的行

use*_*099 9 bash

我有一个大约300KB的文本文件.我想删除此文件中以字母"P"开头的所有行.这就是我一直在使用的:

> cat file.txt | egrep -v P*
Run Code Online (Sandbox Code Playgroud)

那不是输出到控制台.我可以在没有其他命令的情况下在文件上使用cat,它打印出来就很好.我的最终目的是:

> cat file.txt | egrep -v P* > new.txt
Run Code Online (Sandbox Code Playgroud)

没有出现错误,它只是不打印任何内容,如果我运行第二个命令,new.txt为空.我应该说我正在运行安装了Cygwin的Windows 7.

Édo*_*pez 13

说明

  1. 用于^将您的模式锚定到行的开头;
  2. 删除与使用的模式sedd标志匹配的行.

解决方案#1

cat file.txt | sed '/^P/d'
Run Code Online (Sandbox Code Playgroud)

好的解决方案

使用sed-only:

sed '/^P/d' file.txt > new.txt
Run Code Online (Sandbox Code Playgroud)


Zul*_*ulu 8

用awk:

awk '!/^P/' file.txt
Run Code Online (Sandbox Code Playgroud)

说明

  1. 条件以!(否定)开始,否定以下模式;
    • /^P/意思是"匹配以大写字母开头的所有行P",
  2. 因此,该模式被否定为" 忽略以大写P字母开头的行 ".
  3. 最后,awk当缺少{ … }(动作块)时,它会利用行为,即打印验证条件的记录.

所以,换句话说,它会忽略以大写P字母开头的行并打印其他内容.

注意

sed是面向行和awk列导向的.对于你的情况,你应该使用第一个,见Edouard Lopez的回应.