我需要帮助在Bash中提取“@”符号和空格“”之间的字符串。
我正在使用Python Twitter Tools,输出如下:
430438229200740352 2014-02-03 14:30:45 CST <HorizonAwon> @SawBlastt @WereAutomatic 101 for me to join as well
我需要提取两个字符串:
SawBlastt
WereAutomatic
我还需要将它们设置为单独的变量。我已经尝试过使用sed和grep,但没有成功的结果。我真的坚持这个。非常感谢帮助。谢谢!
答案 0 :(得分:4)
您可以使用:
s='430438229200740352 2014-02-03 14:30:45 CST <HorizonAwon> @SawBlastt @WereAutomatic 101 for me to join as well'
grep -oP '@\K[^ ]*' <<< "$s"
SawBlastt
WereAutomatic
答案 1 :(得分:2)
另一个我主要使用的gnu grep命令。
grep -Po "(?<=@)[^ ]*" file
答案 2 :(得分:1)
BASH拥有自己的正则表达式匹配功能。
s="430438229200740352 2014-02-03 14:30:45 CST <HorizonAwon> @SawBlastt @WereAutomatic 101 for me to join as well"
if [[ $s =~ @([A-Za-z]+)\ @([A-Za-z]+) ]]; then
echo ${BASH_REMATCH[1]} ${BASH_REMATCH[2]}
fi
要解释一下,这是man bash
所说的内容:
索引为n的BASH_REMATCH元素是与第n个带括号的子表达式匹配的字符串部分。
答案 3 :(得分:0)
这设置了像OP请求的变量
$ cat foo.txt
430438229200740352 2014-02-03 14:30:45 CST <HorizonAwon> @SawBlastt @WereAutomatic 101 for me to join as well
$ set $(awk '{print $6,$7}' FS='[ @]+' foo.txt)
$ echo $1 $2
SawBlastt WereAutomatic