Shell脚本问题 - 从文件中删除行

时间:2013-08-29 09:39:24

标签: shell

我对shell脚本完全不熟悉,而且我遇到了一些“小问题”。

我有一个包含这样的行的文件:

LineNumber;Log
2;Ligne ignorȨe : Collaborateur PABC842 inactif et non prȨsent dans Machine
2;La valeur (CDD) dans la colonne [Type_contrat] n'est pas dans le liste (FON|CDP|CDI|CDII). Le rȿgle CA1 a ignorȨ ou a dȨsactivȨ la ligne pour le collaborateur PABC842

我必须从我拥有值的文件中删除行:

"inactif et non prȨsent dans Machine"

和:

"Le rȿgle CA1 a ignorȨ ou a dȨsactivȨ la ligne"

必须忽略文件的第一行,并且必须在另一个文件中重定向不带上述行的文件结果...

我只是不知道怎么做。可能是因为特殊字符。

任何帮助将不胜感激。非常感谢提前!

3 个答案:

答案 0 :(得分:1)

将grep与-v选项一起使用

% grep -v "Le rȿgle CA1 a ignorȨ ou a dȨsactivȨ la ligne\|inactif et non prȨsent dans Machine" test.txt

LineNumber;Log

答案 1 :(得分:0)

似乎awk提供了最方便的解决方案。试试这个:

awk '(NR!=1) && ($0!="line1") && ($0!="line2") { print }' file > outputFile

其中 line1 line2 是您要跳过的行。用实际值替换它们。 (NR!= 1)条件阻塞第一行。

编辑:以上代码禁止第1行和匹配第1行和第1行的行2号线。如果你想忽略比较的第一行(即打印它甚至匹配line1或line2),你必须这样做:

 awk '{if(NR==1) print; else if ($0!="line1" && $0!="line2")  print }' file > output  

答案 2 :(得分:0)

sed对于这样的工作来说是一个很好的工具:

sed '1d;/inactif et non prȨsent dans Machine/d;/Le rȿgle CA1 a ignorȨ ou a dȨsactivȨ la ligne/d;' file > otherfile