我在文本文件中有以下几行:
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/13/120411.xml 1
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/11/105016.xml 2
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/15/149972.xml 3
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/12/110688.xml 4
我只想保留这些数据:
1 Q0 120411 1
1 Q0 105016 2
1 Q0 149972 3
1 Q0 110688 4
即保留路径中的每一行/home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/13/120411.xml
,例如仅保留数字120411
等......
答案1
尝试awk
使用/
、.
和(空格)作为字段分隔符:
awk -F'[/. ]' '{print $1 " " $2 " " $11 " " $13}' file
输出:
1 Q0 120411 1
1 Q0 105016 2
1 Q0 149972 3
1 Q0 110688 4
答案2
尝试 sed:
sed 's/\(1 Q0\).*\/\(.*\)\.xml\( .*\)/\1 \2\3/' file
或者
sed 's/\(.*\)\/home.*\/\(.*\)\.xml\( .*\)/\1\2\3/' file
输出:
1 Q0 120411 1
1 Q0 105016 2
1 Q0 149972 3
1 Q0 110688 4
答案3
我的解决方案sed
(OSX&BSD):
sed -E 's!([0-9]*) (Q0) [a-zA-Z0-9_/]*/([0-9]*).xml ([0-9])!\1 \2 \3 \4!g' file.txt
之后,如果您需要不同的模式(例如 Q0 不是常数...),您必须适应它。