如何在 Mac 终端中将 [abc\tdef\tghi] 转换为 [ "abc" "def" "ghi" ]?



我在Terminal

中有以下变量echo $ VAR1

abc def<-以制表符

分隔

如何将其转换为

"abc"def"ghi"中间有一个空间吗?

zsh中,您可以使用

将字符串分解为带引号的单词数组
var1=$'abctdeftghi'
words=( "${(qqq)=var1}" )

,然后在需要时使用

将其转换回单个字符串
var2="${words[*]}"
printf "%sn" "$var2" # prints "abc" "def" "ghi"

或者在不需要的时候跳过中间数组:

var2=${(A)${(qqq)=var1}}

假设变量包含实际的制表符(不是后面跟着"t"的反斜杠),您可以在展开变量时用" "替换制表符(参见这里,在修饰符列表中向下),并在开始和结尾添加引号,如下所示:

""${VAR1//$'t'/" "}""

这里有一个相当复杂的引号和转义模式组合。开头和结尾的双引号使整个字符串成为双引号字符串,因此shell不会对其中的空白做任何奇怪的事情。其中的各种转义双引号都将被视为文字字符(因为它们是转义的),并且只是输出的一部分。模式字符串$'t'处于ANSI-C引号模式,因此t被转换为实际的制表符。

下面是几个使用它的例子:

% VAR1=$'abctdeftghi'    # Define a variable with actual tab characters
% echo ""${VAR1//$'t'/" "}""   # Pass the converted version to a command
"abc" "def" "ghi"
% VAR2=""${VAR1//$'t'/" "}""    # Store converted version in another variable
% echo "$VAR2"
"abc" "def" "ghi"

这是你想要的

echo -e "abctdeftghitjhgtmnb" | sed -ne 's/t/" "/g; s/.*/""/p'

结果:

"abc" "def" "ghi" "jhg" "mnb"

您可以利用awk。例如:

user$ $var='abctdeftghi'
user$ $echo -e ${var}
(output)>>> abc def ghi
user$ $echo -e ${var} | awk -F 't' '{ for (i=1; i <NF; i++) {printf ""%s" ", $i}; printf ""%s"n", $NF}' 
(output)>>> "abc" "def" "ghi"

相关内容

  • 没有找到相关文章

最新更新