2014-01-22 90 views
0

我使用sed来提取文件中2个字符串之间的内容。我使用:防止sed输出文件的其余部分

sed 's/^.*bbb //; s/ddd.*$//' '/Users/myName/Desktop/sedtest.txt' 

和文件包含:

aaa bbb ccc ddd eee 
more random text 
… 

当我使用上面的sed命令它成功地提取ccc,但它也输出下面的线。它输出:

ccc 
more random text 
… 

但我只希望它输出:

ccc 

如何修改的命令,使其只输出ccc?此外,我不知道在运行时ccc是什么bbbddd

回答

1

之间试试这个:

grep bbb yourfile | grep ddd | sed yourcommand 

这只会在包含“BBB”和“DDD”行操作。

0
sed 's/^.*bbb\(.*\)ddd.*$/|\1|/' /tmp/file.txt | grep '^|' | cut -d\| -f2 
1

当sed可以轻松地做到这一点时,不需要链接greps。

sed 's/^.*bbb\(.*\)ddd.*$/\1/;t a;d;:a' /Users/myName/Desktop/sedtest.txt 
+1

“同样容易”,他说,使用奥术和“记录不完善”的sed命令(http://www.grymoire.com/unix/sed.html)。每个人都可以读取“grep a | grep b”为...只能找到包含“a”和“b”的行:-) –

+0

我得到'sed:1:“s /^.* bbb \(。* \)ddd 。* $/\ 1 ...“:undefined标签'a; d;:a''运行此命令时 –

+0

@AdamJohns尝试在第一个分号之后放一个空格,分号前。 – Kevin

1

awk应该做的:

awk '/bbb.*ddd/ {gsub(/.*bbb | ddd.*/,x);print}' file 
ccc 

它选择行只与bbbddd。然后删除所有最多bbbddd

相关问题