在字符串的每个字符前(以及最后一个字符后)添加“/”

-2 sed awk text-processing

我们如何使用sedawk转换unix/u/n/i/x/.
我能够用 Python 做到这一点,如下所示:

separator='/'
separator.join(string)+separator
Run Code Online (Sandbox Code Playgroud)

但是我们如何在 Shell 中实现这一点呢?

Kus*_*nda 6

$ echo unix | sed -e 's,.,&/,g' -e 's,^,/,'
/u/n/i/x/
Run Code Online (Sandbox Code Playgroud)

这类似于NiteRain's answer,但sed通过让单个sed执行两个表达式来删除调用,并通过使用逗号作为s///命令的替代分隔符来简化正则表达式。

此处使用的第一个替换将输入字符串中的每个字符替换为自身后跟一个/字符。第二个替换/在字符串的开头插入 a 。

sed命令可以缩短为sed 's,.,&/,g; s,^,/,',即使用包含两个替换的单个参数,由 a 分隔;


使用 GNU sed,你也可以做

$ echo unix | sed 's,.\{0\},/,g'
/u/n/i/x/
Run Code Online (Sandbox Code Playgroud)

.\{0\}精确的零字符匹配。GNUsed使该表达式在字符串中的每个字符之间进行匹配。其他sed实现可能会将其视为错误。在这里,OpenBSD sed

$ echo unix | sed 's,.\{0\},/,g'
sed: 1: "s,.\{0\},/,g": RE error: empty (sub)expression
Run Code Online (Sandbox Code Playgroud)