我有这个 string =“dontcare noone& 11111-& 1111-& C00 noone”
我必须提取子串& 11111-& 1111-& C00 从第一个&到第一个空白
我尝试了一些索引和一些没有运气的sed。
有人有一些很好的建议吗?
答案 0 :(得分:5)
您可以使用bash的字符串操作功能:
string="dontcare noone &11111-&1111-&C00 noone"
# remove everything up to the first "&"
string="&${string#*&}"
# remove everything from the end to the earliest blank
string="${string%% *}"
# ta da!
echo $string
&11111-&1111-&C00
答案 1 :(得分:3)
$ echo "dontcare noone &11111-&1111-&C00 noone" | grep -o '&[^ ]*'
&11111-&1111-&C00
答案 2 :(得分:0)
Bash正则表达式也可以使用:
[[ $string =~ (&[[:alnum:]]+-?)+ ]]; echo ${BASH_REMATCH[0]}
正则表达式匹配一个或多个组,其中组是&符号,后跟一个或多个字母/数字和可选的最终连字符。如果匹配成功(即[[]]命令存在状态0),则数组BASH_REMATCH
的第一个元素包含string
中与正则表达式匹配的文本。
答案 3 :(得分:-1)
使用grep。
echo "dontcare noone &11111-&1111-&C00 noone" > somefile.txt
grep somefile.txt -e "&" | cut -d " " > someotherfile.txt
grep将基本上“cat”输出并搜索模式,用-e实例化,然后用&
拉出字符串>将输出推送到您已经拥有的文件中,或者只是在那里命名,然后创建它。
然后,您可以随时覆盖somefile.txt,或附加字符串。
说实话,有很多方法可以做到这一点; grep是搜索特定字符串时更好的选项之一,但即便如此,你已经可以在这个问题中告诉我有许多方法来处理问题。
管道,| ;而且,&& ,以及许多其他选项,将为您提供将grep与其他命令相结合的方法,以获得您正在搜索的确切输出。
我也看到你想要它到第一个“空白区域”,我刚刚添加到顶部代码中。使用“cut”和“”的分隔符,您只能在空格后提取数据。使用cut的字段设置,可以切换正在拉动的内容。