如何使用sed

时间:2016-01-08 03:33:13

标签: bash shell sed

我想转此input_variable = 1 进入input_variable = 01

从此前的帖子我尝试了这个但是没有用: sed -e "s/\0" <<< "$input_variable"

我明白了:

  

语法错误:重定向意外

我做错了什么?

谢谢!

修改 感谢Benjamin我找到了一个解决方法(我仍然想知道为什么sed不起作用):

new_variable="0$input_variable"

2 个答案:

答案 0 :(得分:1)

您不要关闭替换命令。每个替换命令必须包含3个分隔符

sed -e 's/pattern/replacement/' <<< 'text' # 3 backslashes

您想要做的事情可以通过以下方式完成:

sed -e 's/.*/0&/' <<< $input_variable

编辑:

您可能正在使用Ubuntu并偶然发现dash也称为Almquist shell,它没有<<<重定向运算符。以下是符合POSIX的替代方案,也适用于dash

sed -e 's/.*/0&/' <<~
$input_variable
~

还有这个:

echo $input_variable | sed -e 's/.*/0&/'

要让变量采用新值,请执行以下操作:

input_variable=$(echo $input_variable | sed -e 's/.*/0&/')

然而,这不是你编写shell脚本的方式。 Shell脚本通常会给出一些文本输出,而不是设置外部变量:

所以,脚本,我们称之为 append_zero.sh

#!/bin/sh
echo $1 | sed 's/.*/0&/'

你会像这样执行它:

$ input_variable=1
$ input_variable=$(append_zero.sh input_variable)
$ echo $input_variable
01

通过这种方式,您可以使用任何具有POSIX兼容/ bin / sh的Unix系统重用的shell脚本

答案 1 :(得分:1)

虽然可以使用sed完成,但脚本中的简单分配可以完全按照您的要求完成。例如,如果您有input_variable=1并想要input_variable=01,则可以通过分配添加前导0

input_variable="0${input_variable}"

或者对于其他类型的数字格式,您可以使用printf -v选项并利用printf函数提供的格式说明符。例如:

printf -v input_variable "%02d" $input_variable

零填充 input_variable长度为2(或使用 field-width 修饰符指定的任何宽度)。您也可以添加前导零,无论宽度如何:

printf -v input_variable "0%s" $input_variable

sed是一个很好的工具,但它并不是这项工作的正确工具。