Linux 在多个sed运行中获取重复条目

Linux 在多个sed运行中获取重复条目,linux,shell,awk,sed,sh,Linux,Shell,Awk,Sed,Sh,我正在使用下面的sed命令来消除重复项 但它仍然会在多次运行中导致重复条目 sed -i '/^text1/i\value=value+1' file.txt | uniq 在这里,uniq没有帮助消除重复条目首先,当您运行sed-i时,sed不会向标准输出任何内容。这就是为什么管道到uniq是无用的 其次,uniq需要对输入进行排序才能工作: sed ... file.txt | sort | uniq > file.txt.tmp mv file.txt.tmp file.txt

我正在使用下面的
sed
命令来消除重复项

但它仍然会在多次运行中导致重复条目

sed -i '/^text1/i\value=value+1' file.txt | uniq

在这里,
uniq
没有帮助消除重复条目

首先,当您运行
sed-i
时,
sed
不会向标准输出任何内容。这就是为什么管道到
uniq
是无用的


其次,
uniq
需要对输入进行排序才能工作:

sed ... file.txt | sort | uniq > file.txt.tmp
mv file.txt.tmp file.txt
您还可以使用排序的
-u
标志:

sed ... file.txt | sort -u > file.txt.tmp
mv file.txt.tmp file.txt

如果必须保留行的顺序,可以使用
awk

awk 'seen[$0]++{next} /^text1/{print "value=value+1";print}' file.txt > file.txt.tmp
mv file.txt.tmp file.txt
顺便说一句,GNU awk现在提供了一种修改文件的方法:

gawk -i inplace 'seen[$0]++{next} /^text1/{print "value=value+1";print}' file.txt

如果你试图做数学运算和操作计数器,我不相信
value=value+1
sed
上能像你期望的那样工作。你可能应该提供一个MCVE。它将帮助人们提供答案。另请参见。您已经成为SO会员3年多了,到目前为止问了193个问题。我认为现在您应该知道在这个论坛上提问需要什么,但如果看不到的话。@EdMorton我同意一个示例文件可能会有所帮助,这也是我的第一个想法。但是如果你看一下代码,就会很清楚会发生什么。@hek2mgl我已经有太多次试图通过阅读不符合他们要求的代码来了解他们想要什么。即使我确信我理解他们的意图,我也只有一半的时间是对的!在这方面,我可以想象一些可能性,但我真的不知道OP想要做什么。