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
}
}
}
}'
output
temp_temp.sum
test.text.dat
somefile.dat
(Кроме того, ваш вопросзаголовок не соответствует вашему описанию, если я что-то упустил, пожалуйста, обновите ваш вопрос и оставьте комментарий с указанием правок (или вы можете отредактировать свой заголовок).)
PSДобро пожаловать в StackOverflow.Пожалуйста, не забудьте принять ответ, который наилучшим образом решит вашу проблему, если таковой имеется, нажав на значок галочки, http://i.imgur.com/uqJeW.png. Когда вы видите хорошие вопросы и ответы, проголосуйте, используя серые треугольники, http://i.imgur.com/kygEP.png. Обратите внимание, что«Зачисление» очков репутации другим не означает вычитание очков репутации (если вы не отправили награду).