使用sed获取列并对其进行修改

使用sed获取列并对其进行修改,sed,Sed,我需要直接修改文件中每行中的5到9列 目前,我在一个while循环中执行此操作,逐行获取每一列。 例如,一条线看起来像: echo "m.mustermann@muster.com;surnanme;givenname;displayname;1111;2222;3333;44(#44;(5555" line_9=$(echo $line | awk -F "[;]" '{print $9}' | sed 's/[^0-9+*,]*//g') 有没有可能用“sed-i”而不是awk来实现这一

我需要直接修改文件中每行中的5到9列

目前,我在一个while循环中执行此操作,逐行获取每一列。 例如,一条线看起来像:

echo "m.mustermann@muster.com;surnanme;givenname;displayname;1111;2222;3333;44(#44;(5555"

line_9=$(echo $line | awk -F "[;]" '{print $9}' | sed 's/[^0-9+*,]*//g')
有没有可能用“sed-i”而不是awk来实现这一点


感谢您的帮助

我不确定它是否可以在sed中完成,但您肯定可以在awk中完成:

… | awk -F";" '{ gsub("[^0-9]*","",$9); print $9 }'
如果您确实想使用sed执行此操作,则表达式将类似于:

… | sed -e 's,\(^[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)\(.*\),\1\2\3\4\5\6\7\8\9,'

我不确定它一般可以在sed中完成,但您肯定可以在awk中完成:

… | awk -F";" '{ gsub("[^0-9]*","",$9); print $9 }'
如果您确实想使用sed执行此操作,则表达式将类似于:

… | sed -e 's,\(^[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)[^0-9]*\([0-9]*\)\(.*\),\1\2\3\4\5\6\7\8\9,'
仅适用于带有sed(posix)的版本

仅适用于带有sed(posix)的版本


我需要这样的东西awk-F“{gsub([^0-9]*”,”,$9);gsub([^0-9]*”,“,”,$8);打印$0}”修改第5列至第9列并打印所有行。也可以打印分隔符吗?现在使用它。。。打印$1”;“$2”;“$3”;“$4”;“$5”;“$6”;“$7”;“$8”;“$9是否有较短的方法?OFS设置输出字段分隔符;awk有循环;请尝试:
awk-F”;“'BEGIN{OFS=“;”}{for(i=5;我能解释一下在$iIt作为替换字符串之前使用了什么吗?)。请查阅gsub的awk文档:我需要这样的东西……| awk-F”;“{gsub([^0-9]*,”,$9);gsub([^0-9]*,”,“,$8);打印$0}'修改第5列至第9列并打印所有行。是否也可以打印分隔符?现在使用此选项…打印$1“;”$2“;“$3”;“$4”;“$5”;“$6”;“$7”;“$8”;“$9是否有较短的方式?OFS设置输出字段分隔符;awk有循环;尝试:
awk-F”;“'BEGIN{OFS=“;”}{for(i=5;ican请您解释在$iIt的替换字符串之前使用。请参阅有关gsub的awk文档: