1

我有这个 string="dontcare noone &11111-&1111-&C00 noone"

我不得不将子字符串 &11111-&1111-&C00 从第一个 & 提取到第一个空白

我已经尝试了一些索引和一些 sed,但没有任何运气。

有人有一些很好的建议吗?

4

4 回答 4

6

您可以使用 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
于 2012-08-02T14:09:38.693 回答
3
$ echo "dontcare noone &11111-&1111-&C00 noone" | grep -o '&[^ ]*'
&11111-&1111-&C00
于 2012-08-02T14:08:43.137 回答
0

Bash 正则表达式也可以工作:

[[ $string =~ (&[[:alnum:]]+-?)+ ]]; echo ${BASH_REMATCH[0]}

正则表达式匹配一个或多个组,其中一个组是一个&符号,后跟一个或多个字母/数字和一个可选的最后连字符。如果匹配成功(即 [[ ]] 命令的存在状态为 0),则数组的第一个元素BASH_REMATCH包含string与正则表达式匹配的文本。

于 2012-08-02T14:57:12.450 回答
-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 事物。

管道,| ; and's、&& 和许多其他选项将为您提供将 grep 与其他命令结合使用的方法,以获得您正在搜索的确切输出。

我还看到你想要它到我刚刚添加到顶部代码的第一个“空白空间”。使用“cut”和“”分隔符,您只能提取空格后的数据。使用 cut 的字段设置,可以切换正在拉取的内容。

于 2012-08-02T14:15:33.210 回答