使用 vim 或 grep 或其他从大文件中删除字符

Delete characters from a big file using vim or grep or other

我有一个大文件,其中包含大约 500000 个数字,其中一些数字包含 URl,密码,正如您在下面的文件示例中看到的那样,我想删除这些数字并只保留那些包含 Url、密码

的数字
101045
101046
101047
101048
101049            <Password>eee33ddrFDE</Password>
      <Url>http://www.example.com/9786140220447.php</Url>
--
      <Password>6tgHDDYUqLH</Password>
      <Url>http://www.example.com/9786140204102.php</Url>
101050
101051
101052
101053
101054

我尝试使用 cat 和 grep 以及 vim

:%s/^.\{6}//

但它会删除所有号码,即使是那些有 Url、我想保留密码的号码。

您只想保留那些包含密码或 url?.

的行

您可以使用 sed:

sed '/^[0-9]\+$/d'

grep:

grep '[0-9]\+ '

vim:

:g/^[0-9]\+$/d

这将删除所有只有数字的行:

awk '!/^[0-9]*$/' file 
101049            <Password>eee33ddrFDE</Password>
      <Url>http://www.example.com/9786140220447.php</Url>
--
      <Password>6tgHDDYUqLH</Password>
      <Url>http://www.example.com/9786140204102.php</Url>

或者你可以使用这个:

awk '/Password|http/' file

仅打印带有 Passwordhttp

的行

或者你可以清理一下:

awk -F"[<>/]" '/Password/ {print "Password="} /http/ {print "Url="}' file
Password=eee33ddrFDE
Url=www.example.com
Password=6tgHDDYUqLH
Url=www.example.com

如果你想删除没有 password/URI 信息的行,你可以尝试:

grep -E "[^0-9]+" filename