替换字符串中的字符以帮助mysql导入



我有以下

fname sname 2 4 06:30 5 125% 32 27 84%

我想把它改成这个

'fname sname', '2', '4', '06:30', '5', '125', '32', '27', '84'

关于如何在一个命令中做到这一点,有什么想法吗?

干杯

开始:

echo 'fname sname 2 4 06:30 5 125% 32 27 84%' | 
sed 's/%//g' | 
sed -E "s/(^[a-z0-9:]+ [a-z0-9:]+|[a-z0-9:]+)/'1',/g" | 
sed 's/,$//'

以下是sed命令的解释:

  1. 从字符串中去掉%符号
  2. 用单引号将单词括起来,末尾加逗号
    • 前两个单词用它们自己的一组引号包装
    • 要使此不区分大小写,请将所有出现的[a-z0-9:]替换为[a-zA-Z0-9:]
  3. 从字符串中删除最后一个逗号

例如:

... | sed -r "s/%//g; s/ ([0-9])/', '1/g; s/^|$/'/g"

sed命令执行3个替换:

  • s/%//g:删除所有%字符
  • s/ ([0-9])/', '1/g:将所有后面跟着数字的空格替换为', '和数字
  • s/^|$/'/g:在字符串的开头和末尾加单引号

使用awk:

$ echo "fname sname 2 4 06:30 5 125% 32 27 84%" | 
  awk '{ 
  sub(/[a-zA-Z]+ [a-zA-Z]+/,"x27&x27");
  gsub(/[0-9:]+/,", x27&x27"); 
  gsub(/%/,"")}1'

输出

'fname sname' , '2' , '4' , '06:30' , '5' , '125' , '32' , '27' , '84'

最新更新