我想在一组文件中进行此替换:
替换:
KEY
KEY1|VAL1
KEY
KEY2|VAL2
by:
KEY
KEY1|VAL1
例如:
KEY
KEY|sde
KEY
KEY|45g
通过
KEY
KEY|sde
简而言之,我需要删除KEY \ n KEY | VAL对的第二次出现。我不擅长使用sed。
答案 0 :(得分:4)
如果我理解你的问题(我可能不会),这是一个解决方案:
sed -ne '/^KEY$/{p;n;p;n;n}' file
说明:
在一行中找到KEY
时:
p
- 打印n;p
- 转到下一行并打印出来。n;n
- 跳过接下来的两行。...并重复。
编辑(解释继续):
-n
告诉sed
除非明确指示(p
),否则不要打印一行。-e
。它表示以下字符串是sed
表达式。答案 1 :(得分:0)
sed -e 'N;/key2\|val2/ d' your_file.txt
应该这样做,注意\是引用|否则你的shell可能会错误地解释命令。
答案 2 :(得分:0)
您可以尝试使用awk。请注意,只更改了所需模式的第二个实例。
# cat file
KEY
KEY1|VAL1
blah
blah
KEY
KEY2|VAL2
junk
junk
KEY
KEY3|VAL3
KEY
KEY4|VAL4
KEY
KEY5|VAL5
$ awk '/^KEY$/&&!f&&!x{s=$0;getline;s=s"\n"$0;f=1;print s;next}f&&/^KEY$/{print s;getline;x=1;f=0;next}1' file
KEY
KEY1|VAL1
blah
blah
KEY
KEY1|VAL1
junk
junk
KEY
KEY3|VAL3
KEY
KEY4|VAL4
KEY
KEY5|VAL5
答案 3 :(得分:-1)
如果您还使用其他工具,这是一个问题吗?我刚试过:
sort "file" | uniq | sed '/KEY2/d'
您甚至可以使用sed模拟uniq,请检查:http://sed.sourceforge.net/sed1line.txt
希望有所帮助