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

时间:2013-06-28 19:26:20

标签: bash sed awk cut tr

我有以下

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

我想将其改为此

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

关于如何在单个命令中执行此操作的任何想法?

干杯

3 个答案:

答案 0 :(得分:3)

你走了:

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. 从字符串中删除最后一个逗号。

答案 1 :(得分:2)

例如:

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

sed命令执行3次替换:

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

答案 2 :(得分:1)

使用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'