Заменить текст определенного номера строки с помощью sed

У меня есть html-файл users.html, который я хочу заменить первой строкой. Первая строка выглядит так:

<template name="AccountSettings">

Я хочу, чтобы первая строка читала

<template name="Users">
1
задан 16 November 2016 в 07:28

2 ответа

Используйте следующую команду:

sed   's/name="AccountSettings"/name="Users"/g' users.html
1
ответ дан 23 May 2018 в 04:10

Perl

$ perl -pi -e 's/AccountSettings/Users/ if $. == 1' input.txt
-pi позволяет вносить изменения для входного файла на месте, т. е. изменять фактический файл. Если вы хотите увидеть результат перед перезаписью файла, используйте -p, вместо этого s/AccountSettings/Users/ выполните первую замену для шаблона. $. - обработанный номер строки

AWK

$ awk 'NR==1{sub("AccountSettings","Users")};1' input.txt                
<template name="Users">
AccountSettings
-pi позволяет вносить изменения для входного файла на месте, т. е. изменять фактический файл. Если вы хотите увидеть результат перед перезаписью файла, используйте -p, а NR==1{} - количество обработанных строк, в частности, мы смотрим, если количество строк равно 1. s/AccountSettings/Users/ выполнить первая замена шаблона. 1 - шаблон с опущенным действием. Действие по умолчанию для шаблона, которое является истинным, заключается в печати, а создание шаблона 1 гарантирует, что мы напечатаем результирующие строки.

Python

Один лайнер с чтением 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

$ 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 гарантирует, что мы печатаем результирующие строки.
1
ответ дан 23 May 2018 в 04:10

Другие вопросы по тегам:

Похожие вопросы: