我在下面的几行里面有文本,并使用该命令提取一些行;
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-z
像sed
这样:
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
它仅返回与您所需模式匹配的行,无需使用cat
、egrep
或xargs
。sed
错误解释:
您没有任何文件可供处理,sed
因此您无法使用-i
。
-i
编辑文件
实际上,您正在将文件meyveler.txt
内容作为流传输到sed
命令,并sed
在标准输出中对其进行编辑。
- 请注意,您的
cat
命令xargs
也是不必要的。
然而正如steeldriver提到的,您正在寻找:
egrep "^[^a-z].*$" meyveler.txt | xargs -Iline sed -i "/line/d" meyveler.txt