如何在 Mac 终端中将 [abc\tdef\tghi] 转换为 ["abc" "def" "ghi"]?
How to convert [abc\tdef\tghi] to ["abc" "def" "ghi"] in Mac Terminal?
我在终端中有以下变量
回显 $VAR1
abc def ghi
<- Separated by tab
如何将其转换为
"abc" "def" "ghi"
with single space in-between?
这可以做你想做的事
echo -e "abc\tdef\tghi\tjhg\tmnb" | sed -ne 's/\t/" "/g; s/.*/"[=10=]"/p'
结果:
"abc" "def" "ghi" "jhg" "mnb"
您可以利用 awk
。例如:
user$ $var='abc\tdef\tghi'
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"
在 zsh
中,您可以使用
将您的字符串分解成一个引用词数组
var1=$'abc\tdef\tghi'
words=( "${(qqq)=var1}" )
如果需要,然后使用
将其变回单个字符串
var2="${words[*]}"
printf "%s\n" "$var2" # prints "abc" "def" "ghi"
或者,如果不需要,则跳过中间数组:
var2=${(A)${(qqq)=var1}}
假设变量包含实际的制表符(不是反斜杠后跟“t”),您可以在扩展变量时用 " "
替换制表符(参见 here,在列表的下方修饰符),并在开头和结尾添加引号,如下所示:
"\"${VAR1//$'\t'/\" \"}\""
这里有相当复杂的引用和转义模式组合。开头和结尾的双引号使整个字符串成为双引号字符串,因此 shell 不会对其中的空格做任何奇怪的事情。其中的各种转义双引号都将被视为文字字符(因为它们被转义了),并且只是输出的一部分。模式字符串 $'\t'
处于 ANSI-C 引用模式,因此 \t
被转换为实际制表符。
这里有几个使用它的例子:
% VAR1=$'abc\tdef\tghi' # 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"
我在终端中有以下变量
回显 $VAR1
abc def ghi <- Separated by tab
如何将其转换为
"abc" "def" "ghi" with single space in-between?
这可以做你想做的事
echo -e "abc\tdef\tghi\tjhg\tmnb" | sed -ne 's/\t/" "/g; s/.*/"[=10=]"/p'
结果:
"abc" "def" "ghi" "jhg" "mnb"
您可以利用 awk
。例如:
user$ $var='abc\tdef\tghi'
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"
在 zsh
中,您可以使用
var1=$'abc\tdef\tghi'
words=( "${(qqq)=var1}" )
如果需要,然后使用
将其变回单个字符串var2="${words[*]}"
printf "%s\n" "$var2" # prints "abc" "def" "ghi"
或者,如果不需要,则跳过中间数组:
var2=${(A)${(qqq)=var1}}
假设变量包含实际的制表符(不是反斜杠后跟“t”),您可以在扩展变量时用 " "
替换制表符(参见 here,在列表的下方修饰符),并在开头和结尾添加引号,如下所示:
"\"${VAR1//$'\t'/\" \"}\""
这里有相当复杂的引用和转义模式组合。开头和结尾的双引号使整个字符串成为双引号字符串,因此 shell 不会对其中的空格做任何奇怪的事情。其中的各种转义双引号都将被视为文字字符(因为它们被转义了),并且只是输出的一部分。模式字符串 $'\t'
处于 ANSI-C 引用模式,因此 \t
被转换为实际制表符。
这里有几个使用它的例子:
% VAR1=$'abc\tdef\tghi' # 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"