使用sed删除所有文本

时间:2010-06-24 05:55:51

标签: regex sed awk

格式:

[词目] {} “UC(ICL>限制)”(属性);(光泽)

testme.txt文件有2行

[testme] {} "acetify" (V,lnk,CJNCT,AJ-V,VINT,VOO,VOO-CHNG,TMP,Vo) <H,0,0>; 
[newtest] {} "acid-fast" (ADJ,DES,QUAL,TTSM) <H,0,0>;

预期的输出是:

testme = acetify
newtest = acid-fast

到目前为止我所取得的成就是:

cat testme.txt | sed's / [// g'| sed's /] // g'| sed's / {} / = / g'| sed's / \“//'

testme = acetify" (V,lnk,CJNCT,AJ-V,VINT,VOO,VOO-CHNG,TMP,Vo) <H,0,0>;
newtest = acid-fast" (ADJ,DES,QUAL,TTSM) <H,0,0>;

如何删除第二个“到行尾的所有文字?

。”

4 个答案:

答案 0 :(得分:1)

在双引号空格打开括号" (后删除所有内容:

sed 's/" (.*//g'

答案 1 :(得分:1)

使用awk

,整个过程可能会更快一些
awk 'NF > 0 { print $1 " = " $3 }' testme.txt | tr -d '[]"'

答案 2 :(得分:1)

这是你用awk而不是所有那些sed命令的方法,这是不必要的。你想要的是字段1和字段3.使用gsub()删除引号和括号

$ awk '{gsub(/\"/,"",$3);gsub(/\]|\[/,"",$1);print $1" = "$3}' file
testme = acetify
newtest = acid-fast

答案 3 :(得分:1)

您对sed的多次调用的整个序列可以替换为:

sed 's/\[\([^]]*\)][^"]*"\([^"]*\).*/\1 = \2/' inputfile