Mat*_*rts 4 regex unix macos replace sed
我有一个正则表达式,我在http://regexpal.com/上成功测试过:
^(\".+?\"),\d.+?,"X",-99,-99,-99,-99,-99,-99,-99,(\d*),(\d*)
Run Code Online (Sandbox Code Playgroud)
我的测试数据如下:
"AB101AA",10,"X",-99,-99,-99,-99,-99,-99,-99,394251,806376,179,"S00","SN9","00","QA","MH","X"
"AB101AF",10,"X",-99,-99,-99,-99,-99,-99,-99,394181,806429,179,"S00","SN9","00","QA","MH","X"
"AB101AG",10,"X",-99,-99,-99,-99,-99,-99,-99,394251,806376,179,"S00","SN9","00","QA","MH","X"
"AB101AH",10,"X",-99,-99,-99,-99,-99,-99,-99,394371,806359,179,"S00","SN9","00","QA","MH","X"
"AB101AJ",10,"X",-99,-99,-99,-99,-99,-99,-99,394171,806398,179,"S00","SN9","00","QA","MH","X"
"AB101AL",10,"X",-99,-99,-99,-99,-99,-99,-99,394331,806530,179,"S00","SN9","00","QA","MH","X"
Run Code Online (Sandbox Code Playgroud)
我想\1,\2,\3在每一行上替换它,所以例如第1行会给出
"AB101AA",394251,806376
Run Code Online (Sandbox Code Playgroud)
如何运行此正则表达式搜索并替换osx中我的文件夹中的所有csv文件?我尝试使用sed,但抱怨语法错误(加上我不确定它会支持这个正则表达式吗?).另外,^(行的开头)和$(行尾)锚点会逐行工作,还是会匹配文件的开头和结尾?
更新:一些很好的响应有cut,awk等从csv获取特定字段,但我最近了解到我需要从该列表中取出数字并将它们分成2个子值,所以我的上面的示例输出需要看起来像:
"AB101AA",3,94251,8,06376
Run Code Online (Sandbox Code Playgroud)
据我所知,我需要使用正则表达式.
您想提取字段1,11和12?对于像这样的任务,awk或者cut真的超级棒!例如
awk -F, '{print $1, $11, $12}' input
Run Code Online (Sandbox Code Playgroud)
使用cut:
cut -d, -f1,11,12 input
Run Code Online (Sandbox Code Playgroud)
使用perl.-a打开autosplit模式 - perl会自动将空格上的输入行拆分到@F数组中.-F与-a一起使用,以选择要分割线的分隔符.
perl -F, -lane 'printf "%s, %d, %d\n", $F[0], $F[10], $F[11]' input
Run Code Online (Sandbox Code Playgroud)
......最后,一个纯粹的bash解决方案
#!/bin/bash
IFS=,
while read -ra ARRAY;
do
echo ${ARRAY[0]}, ${ARRAY[10]}, ${ARRAY[11]}
done < input
Run Code Online (Sandbox Code Playgroud)