我有一个大小约为300KB的文本文件。我想删除此文件中以字母“P”开头的所有行。这就是我一直在使用的:
> cat file.txt | egrep -v P*
那不是输出到控制台。我可以在没有其他命令的情况下在文件上使用cat,它可以打印出来。我的最终目的是:
> cat file.txt | egrep -v P* > new.txt
没有出现错误,它只是不打印任何内容,如果我运行第二个命令,new.txt为空。 我应该说我正在运行安装了Cygwin的Windows 7。
答案 0 :(得分:12)
^
将您的模式锚定到该行的开头; sed
和d
flag cat file.txt | sed '/^P/d'
仅使用sed
:
sed '/^P/d' file.txt > new.txt
答案 1 :(得分:8)
使用awk:
awk '!/^P/' file.txt
!
(否定)开头,否定以下模式;
/^P/
表示“匹配以大写P
开头的所有行”,P
开头的行。awk
(操作块)丢失时,它会利用{ … }
的行为,即打印验证条件的记录。所以,重新说一下,忽略以大写P
开头的行并打印其他所有内容。
sed
面向行,面向awk
列。对于你的情况,你应该使用第一个,见Edouard Lopez的回应。
答案 2 :(得分:2)
使用行号开头和引号:
cat file.txt | egrep -v '^P.*'
P*
表示P为0或更多次因此与-v
一起为您提供无行
^P.*
表示开始行,然后是P,任何char为0或更多次
需要引用以防止shell扩展。
这可以缩短为
egrep -v ^P file.txt
因为不需要.*
,因此不需要引用,egrep
可以从文件中读取数据。
由于我们不使用扩展正则表达式grep
也可以正常工作
grep -v ^P file.txt
最后
grep -v ^P file.txt > new.txt
答案 3 :(得分:2)
这有效:
cat file.txt | egrep -v -e '^P'
-e
表示表达。
答案 4 :(得分:1)
将sed
与原地替换一起使用(对于GNU sed,也将用于你的cygwin)
sed -i '/^P/d' file.txt
BSD(Mac)sed
sed -i '' '/^P/d' file.txt
答案 5 :(得分:0)
如果您想直接对已编辑的文件进行更改,请使用 sed -i '/^P/d' file.txt
。