假设我有一个文件,其中包含其他带有某些扩展名的文件名[.dat、.sum 等]。
gdsds sd8ef g/f/temp_temp.sum
ghfp hrwer h/y/test.text.dat
if[-r h/y/somefile.dat] then....
我想获取完整的文件名,就像上面的文件一样,我应该输出为
temp_temp.sum
test.text.dat
somefile.dat
我使用的是 AIX unix,其中 grep -ow [a-zA-Z_] 文件名不起作用,因为 AIX -o 开关不存在。
sed 很好,但是由于您有一系列类型的“记录”,也许 awk 可以提供帮助。
我的目标是 awk 找到的任何带有“/”的“单词”,然后取出该单词,删除最后一个“/”之前的所有内容,只留下文件名。
{
cat -<<EOS
gdsds sd8ef g/f/temp_temp.sum
ghfp hrwer h/y/test.text.dat
if[-r h/y/somefile.dat] then....
EOS
} \
| awk '{
for (i=1; i<=NF;i++) {
if ($i ~ /.*\//) {
fName=$i
sub(/.*\//, "", fName)
# put any other chars you to to delete inside the '[ ... ]' char list
sub(/[][]/, "", fName)
if (fName) {
print file
}
}
}
}'
输出
temp_temp.sum
test.text.dat
somefile.dat