SED替换不在引号之间的所有内容

时间:2010-11-05 18:48:15

标签: unix sed

我有一个重复的文本列表,“testestewst”对于列表中的每个项目都是唯一的:

testestetet *testest = [testeeste qtestest:@"I need this text"];
[testesteste:@"I need this text"];
[stesteset atestestest];

除了我需要的文字之外,我是如何在世界范围内进行SED替换以删除所有内容?

3 个答案:

答案 0 :(得分:3)

sed 's/.*"\(.*\)".*/\1/g' < test > result

至少如果每行只有一个这样的项目...... (将'test'和'result'替换为输入和输出文件的名称。

编辑

sed 's/^[^"]*$//g' < test | sed 's/.*"\(.*\)".*/\1/g' > result

用新行替换所有没有引号的行...

答案 1 :(得分:1)

如果我明白你的要求,这应该有用......我遇到了一些麻烦只返回包含@的行上的引用文字。如果你的目标可以通过拉出引用文本来实现,那么它可能更简单。

$ cat > t1.sed
/@/{
s/[^"]*@"//
s/".*//
p
}
d
$ sed -f t1.sed t1.dat
I need this text
I need this text
$

答案 2 :(得分:0)

sed -n '/"/!{/\n/{P;b}};s/"/\n/g;D' inputfile

示例:

$ cat inputfile
aaa bbb "this is" eee
fff "what I" hhh
111 "want"
"to see"
222 333
"today" zzz
$ sed -n '/"/!{/\n/{P;b}};s/"/\n/g;D' inputfile
this is
what I
want
to see
today