Unix shell - 替换字符串中所有出现的空格的最佳方法

时间:2017-12-03 07:45:12

标签: bash shell awk sed

我有一个像

这样的字符串
'abc', '<<some string with space>>', 'xyz'

我想得到如下字符串: -

'abc', '<<some_string_with_space>>', 'xyz'

5 个答案:

答案 0 :(得分:1)

您也可以使用sed

echo "'abc', '<<some string with space>>', 'xyz'" | sed s'/ /_/g;s/,_/, /g'

答案 1 :(得分:0)

只需 awk

s="'abc', '<<some string with space>>', 'xyz'"
awk -F', ' '{ gsub(/[[:space:]]+/,"_",$2) }1' OFS=', ' <<<"$s"

输出:

'abc', '<<some_string_with_space>>', 'xyz'

答案 2 :(得分:0)

如果您的问题涉及仅在单引号字符串_内替换'...' 而在其他部分中替换空格的广义问题, 我会按照这个逻辑使用Perl来解决这个问题:

  • 对于输入中的每个'...'(使用正则表达式:'[^']+'
  • 执行用_
  • 替换所有空格的函数

像这样:

echo "'abc', '<<some string with space>>', 'xyz'" |\
  perl -pe 'sub r { $_ = @_[0]; s/ +/_/g; return $_; }; s/'"'[^']+'"'/r($&)/ge'

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed ":a;s/^\(\('[^']*',\s*\)*'[^' ]*\) /\1_/;ta" file

或者更安全:

sed ':a;s/^\(\('\''[^'\'']*'\'',\s*\)*'\''[^'\'' ]*\) /\1_/;ta' file

答案 4 :(得分:-1)

使用awk的gsub和正则表达式来替换空白字符。

mystr = "my sentence is this!"
gsub(/\s/,"_",mystr)
print mystr