如何删除文本文件中的特定字符

如何删除文本文件中的特定字符

我在文本文件中有以下几行:

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 不是常数...),您必须适应它。

相关内容