输入 :
4857544398A7CB9C(HWTC98A7CB9C); AHH-ABN-19-2-59-0720000000-amir3456; 129
期望的输出:
4857544398A7CB9C(HWTC98A7CB9C),amirzain,129
我想-
使用sed
或 任何命令删除第 2 列中最后一个连字符 ( ) 之前的所有内容。
答案1
如果您确实想要您的问题所要求的内容:“我想删除第 2 列中最后一个连字符 (-) 之前的所有内容”,您可以使用以下命令:
$ awk '{sub(/.*-/,"",$2)}1' file
4857544398A7CB9C(HWTC98A7CB9C); amirzain; 129
如果您想要显示的输出,这意味着删除第 2 列中最后一个连字符之前的所有内容,更改amirzain
为Amirzain
并将分号更改为冒号,您可以使用以下命令:
$ perl -lne '@F=split(/; /); $F[1] =~s/^.+-(.)/\U$1/; print join ",",@F' file
4857544398A7CB9C(HWTC98A7CB9C),Amirzain,129
答案2
使用awk:
awk 'BEGIN{FS=";";OFS=","}{n=split($2, seq, "-");$2=seq[n];print}' <file>
输出 :
4857544398A7CB9C(HWTC98A7CB9C),amirzain, 129
答案3
假设A
第二列中的大写字母是偶然的,并且输出中,
的替代是故意的:;
echo '4857544398A7CB9C(HWTC98A7CB9C); AHH-ABN-19-2-59-0720000000-amirzain; 129'|sed -r 's/^([^;]+); .*-([^;]+); (.*)/\1,\2,\3/'
4857544398A7CB9C(HWTC98A7CB9C),amirzain,129
如果您想在整个文件上使用它,请将 a 添加i
到 sed 的标志中:
sed -ri 's/^([^;]+); .*-([^;]+); (.*)/\1,\2,\3/' file