我需要直接从文件中修改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
感谢您的帮助
答案 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' )"