示例文字
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
的行中。
答案 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