sed可以用类似于printf的格式化打印格式的字符串替换文本吗?
以下sed命令用变量中指定的多个值替换以“ $ domain”的当前值开头的行。
/bin/sed "s/\(^${domain} *${limittype} * ${limititem}.*\)/$EXPL#\1\n${domain} ${limittype} ${limititem} ${value}/" /etc/security/limits.conf
但是,由于domain等的值的长度不同,因此无法正确对齐输出。
因此输出将类似于
#oracle hard nproc 131072
oracle hard nproc 666
虽然有效,但很难阅读。我宁愿得到像
#oracle hard nproc 131072
oracle hard nproc 666
我可以拿到的最好的输出是:
/bin/sed "s/\(^${domain}\)\( *\)\(${limittype}\)\( *\)\(${limititem}\)\( *\)\(.*\)/$EXPL#\1\2\3\4\5\6\7\n${domain}\2${limittype}\4${limititem}\6${value}/" /etc/security/limits.conf
但是我相信必须有一种更优雅的方法来做到这一点。
所述sed的一个衬里文件包含一些实例中使用指定数目的字符,例如
sed -e :a -e 's/^.\{1,78\}$/ &/;ta' # set at 78 plus 1 space
但这regexp
不在本replacement
节中。
$EXPL#\1\n
好像有点不对劲
sed
不能以任何方式是可行的做到这一点。如果你能提供这个问题的一个更清楚的描述,很多人在这里可以通过提供一种替代解决方案bash
,awk
或任意数量的其他工具。