我有下面的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
是最后一个单词删除行-不以另一个单词结尾与以单词结尾的输出行相同。