查找ampersend&在一个字符串(bash)

时间:2012-08-02 14:05:36

标签: string bash escaping

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

我必须提取子串& 11111-& 1111-& C00 从第一个&到第一个空白

我尝试了一些索引和一些没有运气的sed。

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

4 个答案:

答案 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的字段设置,可以切换正在拉动的内容。