Один из способов сделать это (при условии отсутствия новых строк в именах файлов) -
ls -t ... | head -n5 | tail -n1
sed может быть очень сложным,но для ваших нужд его легко использовать, попробуйте:
sed -i 's/<a href=".*">/<a href="/some/link/">/g' yourfile.html
Здесь простой синтаксис:
sed -i 's/stringt before replacing/string after replacing/g'
.*
— это подстановочный знак, который соответствует любому использованию в нужном месте
Возможно, вам следует скопировать файл перед использованием sed. -i
изменяет ваш файл, а не создает новый:
-i [SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if SUFFIX supplied)
g
в конце заменяет все совпадения в файле
если вы хотите изменить только первое совпадение в вашем файле, используйте:
sed -i '0,/<a href=".*">/{s/<a href=".*">/<a href="/some/link/">/}' yourfile.html
тот же синтаксис:
sed -i '0,/string before/{s/string brefore/string after/}'
Решение sed
см. ниже в этом ответе.
Предположим, что узлы a
являются частью правильно сформированного XML-документа и что вы хотите добавить .xhtml
к значению их тегов href
, когда существующие значения начинаются с /entry/
:
xml ed -u '//a[starts-with(@href, "/entry/")]/@href' \
-x 'concat(../@href,".xhtml")' file.xml >file-new.xml
При этом используется XMLStarlet (, который иногда устанавливается как xmlstarlet
вместо просто xml
), и он находит соответствующие узлы a
и добавляет .xhtml
к их атрибутам href
независимо от того, где в документе они происходят.
Здесь результат сохраняется в новый файл, но вы можете использовать xml ed --inplace...
для редактирования файла на месте, как только убедитесь, что он работает.
Тестирование:
$ cat file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1"/>
<a href="/entry/someFile2"/>
<a href="/entry/someFile3"/>
</root>
$ xml ed -u '//a[starts-with(@href, "/entry/")]/@href' -x 'concat(../@href,".xhtml")' file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1.xhtml"/>
<a href="/entry/someFile2.xhtml"/>
<a href="/entry/someFile3.xhtml"/>
</root>
Использование sed
(, которое вы бы не использовали в правильно сформированном файле XML,):
sed 's|<a href="/entry/[^"]*|&.xhtml|g' file.xml
Это соответствует строке <a href="/entry/
, за которой следует любое количество символов, кроме "
(, это будет имя файла ). Затем вся эта совпадающая часть заменяется самой собой и строкой .xhtml
.
С помощью sed -i
это сделает модификацию на месте.
Тестирование (на том же файле, что и выше):
$ sed 's|<a href="/entry/[^"]*|&.xthml|g' file.xml
<?xml version="1.0"?>
<root>
<a href="/entry/someFile1.xhtml"/>
<a href="/entry/someFile2.xhtml"/>
<a href="/entry/someFile3.xhtml"/>
</root>