附加到具有X但没有Y

时间:2018-11-17 02:16:09

标签: bash awk sed scripting

示例文字

I like Linux
I like Microsoft
I like Solaris
I hate Linux
I hate Microsoft
I hate Solaris

我正在尝试找出添加与regex X匹配但没有regex Y的行。使用示例文本,我尝试获得以下内容。

I like Linux
I like Microsoft and Linux
I like Solaris and Linux
I hate Linux
I hate Microsoft
I hate Solaris

请注意,它只会添加到具有like而没有Linux的行中。

2 个答案:

答案 0 :(得分:3)

使用awk应该更简单。 > tmp_file && mv tmp_file Input_file用于将输出保存到Input_file本身,它将创建一个临时文件,然后将其更改为实际的Input_file本身),尽管有以下显示的gawk -i inplace,请尝试使用awk选项,以防您在系统上安装它。

awk '/like/ && !/Linux/{$0=$0 " and Linux"} 1'  Input_file > temp_file && mv temp_file Input_file

说明: 以下也是上述代码的说明。

awk '
/like/ && !/Linux/{     ##Checking condition if a line contains string like and DO NOT contain Linux then do following.
  $0=$0 " and Linux"    ##Re-creating $0(current line) with $0 value itself and string " and Linux" here as per OP request.
}                       ##Closing block for this condition now.
1                       ##awk works on method of pattern and action, 1 means making condition/pattern TRUE and NO action mentioned so by default print will happen.
' Input_file          ##Mentioning Input_file name here.

答案 1 :(得分:0)

这是使用awk完成的

awk '/like/ && !/Linux/ {print $0, "and Linux"}
     !( /like/ && !/Linux/) {print $0}' filename