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

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

我们如何使用sedorawk来翻译unix/u/n/i/x/.
我能够使用 Python 执行此操作,如下所示:

separator='/'
separator.join(string)+separator

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

答案1

$ echo unix | sed -e 's,.,&/,g' -e 's,^,/,'
/u/n/i/x/

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

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

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


使用 GNU sed,你也可以这样做

$ echo unix | sed 's,.\{0\},/,g'
/u/n/i/x/

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

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

答案2

echo "unix" | sed -e 's/\(.\)/\/\1/g' | sed -e 's/$/\//'

输出:

/u/n/i/x/

答案3

在每个 Unix 机器上的任何 shell 中使用任何 awk:

$ echo 'unix' | awk '{gsub(/./,"/&"); print $0"/"}'
/u/n/i/x/

答案4

sed 的一种方法是在末尾添加换行符。

$ echo Unix | sed -n 'G;s|.|/&|g;P'
/U/n/i/x/

也可以使用以下方法。两者都使用 GNU 版本的 awk n sed。

$ echo Unix | sed -e 's/./\n&/g;G' | paste -sd'/'
$ echo Unix | awk '{$1=OFS $1}++NF' FPAT=. OFS=/

sed 编辑器的最佳资源是 Dale Dougherty 等人编写的 O'Reillys' sed n awk。另外,多参加像这样的 sed 小组,学习其他人的方法,这将使您更快地掌握最新情况。

相关内容