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'