在 AIX/ksh 上的每个输出行之前放置制表符

在 AIX/ksh 上的每个输出行之前放置制表符
0:root@SERVER:/root # echo "something" | sed -e 's/^/\t/g'
tsomething
0:root@SERVER:/root # 

AIX/ksh ..为什么它不起作用?我只想在每一行之前加一个“制表符”!

答案1

\t表达式右侧的sed内容不可移植。以下是一些可能的解决方案:

POSIX外壳

请记住,由于许多 shell 在内部将其字符串存储为 cstring,因此如果输入包含空字符 ( \0),则可能会导致该行过早结束。

echo "something" | while IFS= read -r line; do printf '\t%s\n' "$line"; done

awk

echo "something" | awk '{ print "\t" $0 }'

珀尔

echo "something" | perl -pe 'print "\t"'

答案2

如果您的 shell 是 bash、ksh93 或 zsh,则可以使用 shell 转义在 sed 命令中放置文字制表符。引用语法按字面意思$'…'处理引号内的每个字符,反斜杠和单引号除外。您可以在这些引号内使用常用的反斜杠转义符。

sed -e $'s/^/\t/g'

相关内容