我有以下
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 命令的解释:
[a-z0-9:]
为[a-zA-Z0-9:]
例如像这样:
... | 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'