Unix 提取文件名
因此,我是SED和Unix新手,希望替换以下文件:Unix 提取文件名,unix,sed,Unix,Sed,因此,我是SED和Unix新手,希望替换以下文件: 1500:../someFile.C:111 error 1869:../anotherFile.C:222 error 1869:../anotherFile2.Cxx:333 error //thousands of more lines with same structure 使用下面的文件 someFile.c anotherFile.c anotherFile2.Cxx 基本上,我只想从每一行提取文件名 到目前为止,我已经阅读了有
1500:../someFile.C:111 error
1869:../anotherFile.C:222 error
1869:../anotherFile2.Cxx:333 error
//thousands of more lines with same structure
使用下面的文件
someFile.c
anotherFile.c
anotherFile2.Cxx
基本上,我只想从每一行提取文件名
到目前为止,我已经阅读了有关sed的文档和第二个答案。我最好的尝试是使用正则表达式,如下所示:
sed "s/.\*\/.:.*//g" myFile.txt
您可以捕获上一个
/
和下一个:
之间的子字符串,并用捕获的字符串替换整个字符串(\1
)
或者,使用-r
标志进行sed,转义稍微少一些
sed -r 's#.*/([^:]+).*#\1#g' myFile.txt
或者,如果您想使用grep
,则只有当grep
支持将启用PCRE
的-p
标志时,这才有效:
grep -oP '.*/\K[^:]+' myFile.txt
someFile.C
anotherFile.C
anotherFile2.Cxx
您可以捕获上一个
/
和下一个:
之间的子字符串,并用捕获的字符串替换整个字符串(\1
)
或者,使用-r
标志进行sed,转义稍微少一些
sed -r 's#.*/([^:]+).*#\1#g' myFile.txt
或者,如果您想使用grep
,则只有当grep
支持将启用PCRE
的-p
标志时,这才有效:
grep -oP '.*/\K[^:]+' myFile.txt
someFile.C
anotherFile.C
anotherFile2.Cxx
有很多方法可以做到这一点 当然,您可以使用
sed
:
sed 's/^[^:]*://;s/:.*//;s#\.\./##' input.txt
sed 's%.*:\.\./\([^:]*\):.*%\1%' input.txt
或者您可以在管道中使用一系列grep-o
实例:
grep -o ':[^:]*:' input.txt | grep -o '[^:]\{1,\}' | grep -o '/.*' | grep -o '[^/]\{1,\}'
您甚至可以使用awk
:
awk -F: '{sub(/\.\.\//,"",$2); print $2}' input.txt
但最简单的方法可能是使用cut
:
cut -d: -f2 input.txt | cut -d/ -f2
有很多方法可以做到这一点 当然,您可以使用
sed
:
sed 's/^[^:]*://;s/:.*//;s#\.\./##' input.txt
sed 's%.*:\.\./\([^:]*\):.*%\1%' input.txt
或者您可以在管道中使用一系列grep-o
实例:
grep -o ':[^:]*:' input.txt | grep -o '[^:]\{1,\}' | grep -o '/.*' | grep -o '[^/]\{1,\}'
您甚至可以使用awk
:
awk -F: '{sub(/\.\.\//,"",$2); print $2}' input.txt
但最简单的方法可能是使用cut
:
cut -d: -f2 input.txt | cut -d/ -f2
您在哪里剪切(是的,您可以使用
cut
两次)?从最后一个/
开始,直到最后一个:
?@user3586940如果任何答案对您有帮助,请接受答案。您在哪里剪切(是的,您可以使用剪切
两次)?从最后一个/
开始,直到最后一个:
?@user3586940如果任何答案对您有帮助,请接受答案。