-1

我对 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"

必须忽略文件的第一行,并且必须将没有上述行的文件的结果重定向到另一个文件中...

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

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

4

3 回答 3

1

使用带有 -v 选项的 grep

% 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
于 2013-08-29T10:17:32.643 回答
0

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

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

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

编辑:上面的代码抑制了第 1 行和匹配第 1 行和第 2 行的行。如果您想忽略比较中的第一行(即,即使它与 line1 或 line2 匹配也打印它),您必须这样做:

 awk '{if(NR==1) print; else if ($0!="line1" && $0!="line2")  print }' file > output  
于 2013-08-29T10:49:26.060 回答
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
于 2013-08-29T11:24:12.950 回答