我想要做这个替代的一组文件的做多行复杂的替换:如何使用SED
取代:
KEY
KEY1|VAL1
KEY
KEY2|VAL2
由:
KEY
KEY1|VAL1
例如:
KEY
KEY|sde
KEY
KEY|45g
来自
KEY
KEY|sde
总之,我需要删除键\ n键的第二occurence | VAL对.. 我不擅长使用SED,请帮助..我有急事..
谢谢很多,
三位一体
我想要做这个替代的一组文件的做多行复杂的替换:如何使用SED
取代:
KEY
KEY1|VAL1
KEY
KEY2|VAL2
由:
KEY
KEY1|VAL1
例如:
KEY
KEY|sde
KEY
KEY|45g
来自
KEY
KEY|sde
总之,我需要删除键\ n键的第二occurence | VAL对.. 我不擅长使用SED,请帮助..我有急事..
谢谢很多,
三位一体
这是个问题,如果你使用其他工具也?我只是想:
sort "file" | uniq | sed '/KEY2/d'
你甚至可以效仿的uniq使用SED,请检查:http://sed.sourceforge.net/sed1line.txt
希望帮助
这将完全改变文件内容,我想这不是意图 – Bernhard 2011-03-03 09:33:02
sed -e 'N;/key2\|val2/ d' your_file.txt
应该做的伎俩,注意\是引用|否则你的shell可能会错误地解释命令。
如果我正确理解你的问题(我可能没有),这是一个解决方案:
sed -ne '/^KEY$/{p;n;p;n;n}' file
说明:
当自己在一条线上找到KEY
:
p
- 打印行n;p
- 转到下一行并将其打印到O操作。n;n
- 跳过接下来的2行。...并重复。
编辑(说明续):
-n
告诉sed
要打印的行,除非明确指示这样做(与p
)。-e
。它表示以下字符串是sed
表达式。你可以尝试使用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
'sed'具有一些多线功能,但我怀疑你对你的任务期望过高。如果您的输入非常规则,例如每个'KEY'重复两次,并在其后面有一个'KEYx/VALx',这很简单,但根据你的说明,你可能需要查看awk或适合你的解决方案的脚本语言。 – 2011-03-03 09:28:21
他们重复两次 – trinity 2011-03-03 10:05:28