我尝试创建一个函数,它将字符串作为参数,用双引号将字符串中的每个单词括起来,并将其作为字符串返回。
我尝试的是下面的sed代码段,但它输出的是用双引号括起来的整个字符串,而不是每个单词。sed -r "s/ /\"/g"
sed -r "s/ /\"/g"
function wordWrapper { # Do some magic here } var = wordWrapper "Hello World" echo $var
应输出"Hello" "World"
"Hello" "World"
bfnvny8b1#
使用printf的纯bash解决方案,不需要任何正则表达式或外部工具:
printf
s="word1 word2 hello world" set -f printf -v r '"%s" ' $s set +f echo "$r" "word1" "word2" "hello" "world"
PS:如果你想删除尾部空格,请使用echo "${r% }"。
echo "${r% }"
juud5qan2#
您可以使用
sed 's/[^[:space:]]*/"&"/g' file > newfile sed -E 's/[^[:space:]]+/"&"/g' file > newfile
在第一个POSIX BRE模式中,[^[:space:]]*匹配零个或多个除空格字符之外的字符,并且"&"用双引号括住自身来替换匹配。在第一个POSIX ERE模式中,[^[:space:]]+匹配一个或多个除空格之外的字符。请参阅online demo:
[^[:space:]]*
"&"
[^[:space:]]+
#!/bin/bash s="word1 word2 hello world" sed -E 's/[^[:space:]]+/"&"/g' <<< "$s" # => "word1" "word2" "hello" "world" sed 's/[^[:space:]]*/"&"/g' <<< "$s" # => "word1" "word2" "hello" "world"
hs1rzwqc3#
使用sed
sed
$ echo "word1 word2 hello world" | sed 's/\S\+/"&"/g' "word1" "word2" "hello" "world"
polkgigr4#
给定存储在名为instr的变量中的以下字符串:
instr
$ instr='word1 word2 hello world'
您可以:
$ read -r -a array <<< "$instr" $ printf -v outstr '"%s" ' "${array[@]}" $ echo "${outstr% }" "word1" "word2" "hello" "world"
或者如果您愿意:
$ echo "$instr" | awk -v OFS='" "' '{$1=$1; print "\"" $0 "\""}' "word1" "word2" "hello" "world"
4条答案
按热度按时间bfnvny8b1#
使用
printf
的纯bash解决方案,不需要任何正则表达式或外部工具:PS:如果你想删除尾部空格,请使用
echo "${r% }"
。juud5qan2#
您可以使用
在第一个POSIX BRE模式中,
[^[:space:]]*
匹配零个或多个除空格字符之外的字符,并且"&"
用双引号括住自身来替换匹配。在第一个POSIX ERE模式中,[^[:space:]]+
匹配一个或多个除空格之外的字符。请参阅online demo:
hs1rzwqc3#
使用
sed
polkgigr4#
给定存储在名为
instr
的变量中的以下字符串:您可以:
或者如果您愿意: