显示不包含特定字符串linux的行

Dor*_*ian 5 linux awk grep sed

我的服务器linux中有一个带有这个字符的文本文件;

  ID              DATA
MF00034657,12435464^DRogan^DPUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;M-DT_MAX_1;
MF00056578,12435464^DRogan^DPUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;UM-DT_MAX_123;
Run Code Online (Sandbox Code Playgroud)

现在我需要过滤不包含"PUM-DT_MAX_1234"的行并保存在带有ID的另一个文件中

像这样

MF00034657,M-DT_MAX_1
MF00056578,UM-DT_MAX_123
Run Code Online (Sandbox Code Playgroud)

我用

grep -v 'PUM-DT_MAX_1234' file > file.out
awk '!/PUM-DT_MAX_1234/' file > file.out
Run Code Online (Sandbox Code Playgroud)

但是不行

有什么建议

谢谢!

voi*_*ger 17

使用 awk '$0 !~ /your_pattern/'

发现在(可能)最大的awk DOC

  • 与此处的其他解决方案相比,这看起来像代码高尔夫。感谢您的简洁和优雅。 (2认同)

Ner*_*elu 1

sed '1b
h;s/.*DRogan^D//;s/PUM-DT_MAX_1234;\{0,1\}//g;s/;$//;/./!d
H;g;s/,.*\n/,/' YourFile
Run Code Online (Sandbox Code Playgroud)
  • 根据您的样本

概念:

  • 保留该行的副本
  • 从线上拆下头部和任何“PUM”。检查是否有东西残留
  • 取回标头(从缓冲行)并使用reduce行重新格式化