使用sed获取列并进行修改

时间:2015-12-03 09:38:13

标签: 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

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我不确定它是否可以在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,'

答案 1 :(得分:0)

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

line_9="$(echo $line | sed 'H;x;s/^\(.\)\(\([^;]*;\)\{8\}\)\([^;]*\)/\2\1\4\1/;h;s/\(\n\).*\1/\1/;x;s/.*\(\n\)\(.*\)\1.*/\2/;s/[^0-9+*,]*//g;G;s/\(.*\)\(\n\)\(.*\)\2/\3\1/;h;s/.*//;x' )"