sed Mac终端删除以一个单词开头但不以另一个单词结尾的行



我有下面的txt文件,其中包含文本(文件名Test.txt(

THE Lord is djncjdnjfn one almighty
THE Lord is dcdcdc great
THE Lord is dcdcdc one
THE Lord is cdcdcdc most powerful
THE Lord has cdcdcdc many faces
THE Lord is cdcdc above all

我想删除所有以主开头而不是以一结尾的行所以输出将是

THE Lord is dcdcdc one

我正在使用终端,我正在使用以下命令

sed -i "" '/^THE Lord*one$/!d' Test.txt

这对我不起作用而且我有一些看法如果我想删除所有以勋爵开头的行

sed -i "" '/^THE Lord/d' Test.sh不工作

相反,sed -i "" '/THE Lord/d正在中工作

类似地,如果我想删除以一个结尾的行

sed -i "" '/one$/d' Test.sh不工作

相反,sed -i "" '/one/d'正在中工作

我无法使用$ ^

sed是一种脚本语言。通过分支的方式支持简单的if/then逻辑。b命令跳到脚本的末尾,并使sed放弃对当前行的进一步处理。

sed -e '/^THE Lord/!b' -e '/one$/!d' file

!否定运算符表示,如果前面的条件为false,则运行该命令。

添加-i ""选项以将更改写回文件,而不是在标准输出上显示结果。

您可以考虑此sed:

sed -n '/^THE Lord /{ /one$/p; }' file
THE Lord is dcdcdc one

您也可以考虑这个更简单的grep解决方案:

grep "^THE Lord .* one$" file
THE Lord is dcdcdc one

一个awk:

$ awk '$1=="THE" && $2=="Lord" && $NF=="one"' file

输出:

THE Lord is dcdcdc one

$1是第一个单词,$NF是最后一个单词删除行-不以另一个单词结尾与以单词结尾的输出行相同。

最新更新