防止sed输出文件的其余部分

时间:2014-01-22 18:32:04

标签: macos bash sed

我正在使用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之间

4 个答案:

答案 0 :(得分:1)

试试这个:

grep bbb yourfile | grep ddd | sed yourcommand

这只会在包含“bbb”和“ddd”的行上运行。

答案 1 :(得分:1)

当sed可以轻松实现时,无需链接greps。

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

答案 2 :(得分:1)

awk应该:

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

它仅选择bbbddd行。然后移除所有bbbddd

答案 3 :(得分:0)

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