如何获取字符串中给定字符/模式的每次出现之前的字符?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (30)

我正在尝试使用标准bash工具获取字符串中每个出现给定字符/模式的字符,如grep,awk / gawk,sed ...

Step I:获取每次出现该字符之前的字符 :

例:

字符串1 =>:hd:fg:kl: 字符串2 =>:df:lkjh: 字符串3 =>:glki:l:s:d:

预期成绩

结果1 => dgl 结果2 => fh 结果3 => ilsd

我用awk多次尝试但没有成功

Step II:在结果字符串的每个字符之间插入一个给定的字符

示例 /

结果1 => d / g / l 结果2 => f / h 结果3 => i / l / s / d

这个步骤我有一个awk表达式 awk -F '' -v OFS="/" '{$1=$1;print}'

我不知道这是否是可以做到Step I使用awk或sed?

提问于
用户回答回答于

这可能适合你(GNU sed):

sed -r 's/[^:]*([^:]):+|:+/\1/g;s/\B/\//g' file

在整个行中全局替换零个或多个非:字符,后跟单个字符,后跟单个字符::单个字符。然后/在每个字符之间替换插入a 。

扫码关注云+社区

领取腾讯云代金券