У меня есть html-файл users.html, который я хочу заменить первой строкой. Первая строка выглядит так:
<template name="AccountSettings">
Я хочу, чтобы первая строка читала
<template name="Users">
Используйте следующую команду:
sed 's/name="AccountSettings"/name="Users"/g' users.html
$ perl -pi -e 's/AccountSettings/Users/ if $. == 1' input.txt
-pi позволяет вносить изменения для входного файла на месте, т. е. изменять фактический файл. Если вы хотите увидеть результат перед перезаписью файла, используйте -p, вместо этого s/AccountSettings/Users/ выполните первую замену для шаблона. $. - обработанный номер строки $ awk 'NR==1{sub("AccountSettings","Users")};1' input.txt
<template name="Users">
AccountSettings
-pi позволяет вносить изменения для входного файла на месте, т. е. изменять фактический файл. Если вы хотите увидеть результат перед перезаписью файла, используйте -p, а NR==1{} - количество обработанных строк, в частности, мы смотрим, если количество строк равно 1. s/AccountSettings/Users/ выполнить первая замена шаблона. 1 - шаблон с опущенным действием. Действие по умолчанию для шаблона, которое является истинным, заключается в печати, а создание шаблона 1 гарантирует, что мы напечатаем результирующие строки. Один лайнер с чтением stdin:
$ python -c 'import sys;print("\n".join([ l.strip().replace("AccountSettings","Users") if i==0 else l.strip() for i,l in enumerate(sys.stdin)]))' < input.txt
Версия скрипта:
#!/usr/bin/env python
from sys import argv;
with open(argv[1]) as f:
for index,line in enumerate(f):
text = line.strip().replace("AccountSettings","User") if index == 0 else line.strip()
print(text)
[ f12] - количество обработанных строк, в частности, мы смотрим, если количество строк равно 1. Мы используем структуру variable = value_1 if condition else value_2 для создания списка строк с соответствующими значениями в одном слоте, а в скрипте присвоение версии переменной text и немедленная печать этой переменной. Условие для замены - это, конечно, номер строки $ ruby -pe '$_=$_.sub(/AccountSettings/,"Users") if $. == 1' input.txt
<template name="Users">
AccountSettings
Мы используем структуру variable = value_1 if condition else value_2 для создания списка строк с соответствующими значениями в одно- liner, в то время как при назначении версии сценария к переменной text и немедленной печати этой переменной выполняется. Условием замены является, конечно, номер строки 1 - шаблон с опущенным действием. Действие по умолчанию для шаблона, которое является истинным, заключается в печати, а создание шаблона 1 гарантирует, что мы печатаем результирующие строки.