テキストファイルから特定の文字を削除する方法

テキストファイルから特定の文字を削除する方法

テキストファイルには次の行があります。

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が一定ではない...)、これに適応する必要があります。

関連情報