我有一个这样的文本文件:
20173041 user name build/release/src/file1.cpp
20173041 John build/debug/master/file1.cpp
20173041 J.F.K build/test/testsrc/file1.cpp
20173041 uk us build/profile/branch/file1.cpp
我希望消除所有" build / xxxx /"从每一行得到一个这样的文件:
20173041 user name src/file1.cpp
20173041 John master/file1.cpp
20173041 J.F.K testsrc/file1.cpp
20173041 uk us branch/file1.cpp
删除的文本始终以" build"开头。怎么做?
答案 0 :(得分:1)
使用GNU sed
regEx
模式搜索模式。请注意字段分隔符更改为|
,以避免在搜索模式中使用/
时转义。
sed -r 's|build/[[:alnum:]]+/||g' file2
20173041 user name src/file1.cpp
20173041 John master/file1.cpp
20173041 J.F.K testsrc/file1.cpp
20173041 uk us branch/file1.cpp
添加-i.bak
sed -i.bak -r 's|build/[[:alnum:]]+/||g' file2
答案 1 :(得分:1)
你也可以使用像这样的多个分隔符来使用awk:
$ echo "20173041 user name build/release/src/file1.cpp" |awk -F"[ /]" '{print $1,$2,$3,$6"/"$7}'
20173041 user name src/file1.cpp
答案 2 :(得分:1)
awk -F/ '{sub(/ build/,"")}{print $1,$(NF-1)"/"$NF}' file
20173041 user name src/file1.cpp
20173041 John master/file1.cpp
20173041 J.F.K testsrc/file1.cpp
20173041 uk us branch/file1.cpp