bash - 获取两个字符之间的字符串和以逗号作为分隔符的输出字段

标签 bash sed grep

我有以下字符串:

":: +1 +2 +3 +4 +5 -7 -6  :: 7 cycles"

我想 grep :: 之间的所有内容,删除 + 符号并用逗号作为分隔符写入数字,开头或结尾没有空格或逗号:

1,2,3,4,5,-7,-6

我尝试了以下方法:

echo ":: +1 +2 +3 +4 +5 -7 -6  :: 7 cycles" | sed -e 's/.*::\(.*\)::.*/\1/' | sed -e 's/+//g' -e 's/ /,/g'

目前还没有。关键是虽然这里我有 7 个字段(数字),但在我的工作中,字段的数量可能会有所不同,所以我不能只打印出带有 awk 声明。它需要一个适用于任意数量字段的解决方案。

最佳答案

使用 awk,您可以通过使用 ::(由空格和/或加号包围)作为输入字段分隔符来轻松完成此操作:

s=":: +1 +2 +3 +4 +5 -7 -6  :: 7 cycles"
awk -F '[+ ]*::[ +]*' '{gsub(/[+ ]+/, ",", $2); print $2}' <<< "$s"

1,2,3,4,5,-7,-6

关于bash - 获取两个字符之间的字符串和以逗号作为分隔符的输出字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44240443/

相关文章:

linux - 抑制 Grep 中的非匹配行

linux - 解析shell脚本中的参数

python - 在Python中使用bash命令脚本

linux - shell Bash 脚本

php sed 类似功能

regex - 仅匹配单个数字 sed

linux - 在 vim 中打开 100 个文件

linux - 在 docker 中运行 React 实例之前运行 bash 脚本?

awk - 删除匹配字符后的所有字符

用于解析测试输出并仅打印失败案例的正则表达式