我有一个文件(/tmp/test),里面有一个字符串"aaabbbccc"
我想用 sed 从字符串中提取"bbb"。
这样做将返回整个字符串:
sed -n '/aaa/,/ccc/p' /tmp/test
我只想用 sed 从字符串中返回 bbb(我正在尝试学习 sed,所以对其他解决方案不感兴趣)
Sed 在基本行上工作,a,b{action}
将对匹配a
的行运行操作,直到与b
匹配的行。在您的情况下
sed -n '/aaa/,/ccc/p'
将在匹配/aaa/
时开始打印行,并在匹配/ccc/
时停止,这不是您想要的。
要操作一行,有乘法选项,s/search/replace/
一个可用于删除前导aaa
和尾随ccc
:
% sed 's/^aaa|ccc$//g' /tmp/test
bbb
故障:
s/
^aaa # Match literal aaa in beginning of string
| # ... or ...
ccc$ # Match literal ccc at the end of the sting
// # Replace with nothing
g # Global (Do until there is no more matches, normally when a match is
# found and replacement is made this command stops replacing)
如果您不确定有多少个a
和c
可以使用:
% sed 's/^aa*|cc*$//g' /tmp/test
bbb
这将匹配文字a
后跟行首的零个或多个a
。c
也是如此,但只是在最后。
使用 GNU sed:
sed 's/aaa(.*)ccc/1/' /tmp/test
输出:
嘟嘟��
请参阅: 堆栈溢出正则表达式常见问题解答