使用 sed 删除行

使用 sed 删除行

我在下面的几行里面有文本,并使用该命令提取一些行;

cat meyveler.txt

elma armut ve ayva daha cok kış meyveleridir
ancak,
yaz mevyeleride oldukca lezzetli oldugu gözden kacmamalıdır.
ayrıca tüm bunlara istinaden tüm calısmalat gözden gecirilebilir olmalıdır.
12.ayın gelmesiyle beraber ayva ve Nar sezonu hareketlenmeye,
Bus senenin bitisiylede Hamsiler hareketlenmeye baslayacaktır.
=tabi bu işlemler bu sekilde akıp gider

并使用该命令提取一些行;

cat meyveler.txt | egrep "^[^a-z].*$"

12.ayın gelmesiyle beraber ayva ve Nar sezonu hareketlenmeye,
Bus senenin bitisiylede Hamsiler hareketlenmeye baslayacaktır.
=tabi bu işlemler bu sekilde akıp gider

现在我尝试通过这个删除此行但出现错误,我该怎么办?

cat meyveler.txt | egrep "^[^a-z].*$" | xargs -Iline sed -i "/line/d"

答案1

给定一个文件meyveler.txt,你可以删除以不是用小写字母简单地a-zsed这样:

sed '/^[^a-z]/d' meyveler.txt

上述命令将从您的文件中读取并将过滤后的输出打印到终端。如果您想直接就地编辑文件,请添加标志-i。如果指定后缀,则可以将原始文件保留为备份(例如-i.bak将原始数据保留为meyveler.txt.bak):

sed -i '/^[^a-z]/d' meyveler.txt

您无需cat读取文件,也无需grep过滤egrep它们。所有这些功能都内置于 中sed

答案2

我的解决方案是:

grep '^[a-z]' meyveler.txt

它仅返回与您所需模式匹配的行,无需使用categrepxargssed


错误解释:

您没有任何文件可供处理,sed因此您无法使用-i

  • -i编辑文件

实际上,您正在将文件meyveler.txt内容作为流传输到sed命令,并sed在标准输出中对其进行编辑。

  • 请注意,您的cat命令xargs也是不必要的。

然而正如steeldriver提到的,您正在寻找:

egrep "^[^a-z].*$" meyveler.txt | xargs -Iline sed -i "/line/d" meyveler.txt

相关内容