我们如何使用sed
orawk
来翻译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 小组,学习其他人的方法,这将使您更快地掌握最新情况。