我有一个文件(/ tmp / test),它有一个字符串" aaabbbccc"在其中
我想提取" bbb"来自带有sed的字符串。
执行此操作将返回整个字符串:
sed -n '/aaa/,/ccc/p' /tmp/test
我只想用sed从字符串返回bbb(我正在尝试学习sed,所以对其他解决方案不感兴趣)
答案 0 :(得分:3)
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
,但最后也是如此。
答案 1 :(得分:2)
使用GNU sed:
sed 's/aaa\(.*\)ccc/\1/' /tmp/test
输出:
bbb