Как вставить строку, используя sed перед шаблоном и после номера строки?
Как вставить строку в файл с помощью sed
перед шаблоном и после номера строки? И как использовать то же самое в оболочке script?
Вставляет строку перед каждой строкой с рисунком:
sed '/Sysadmin/i \ Linux Scripting' filename.txt
И это изменит это, используя диапазон номеров строк:
sed '1,$ s/A/a/'
Итак, как использовать эти обе (я не мог) вставить строку в файл с помощью sed
перед шаблоном и после номера строки или другого подхода?
Ответы
Ответ 1
Вы можете написать файл sed script и использовать:
sed -f sed.script file1 ...
Или вы можете использовать (несколько) -e 'command'
параметры:
sed -e '/SysAdmin/i\
Linux Scripting' -e '1,$s/A/a/' file1 ...
Если вы хотите добавить что-то после строки, то:
sed -e '234a\
Text to insert after line 234' file1 ...
Ответ 2
Я предполагаю, что вы хотите вставить строку перед шаблоном, только если номер текущей строки больше некоторого значения (т.е. если шаблон происходит до номера строки, ничего не делать)
Если вы не привязаны к sed
:
awk -v lineno=$line -v patt="$pattern" -v text="$line_to_insert" '
NR > lineno && $0 ~ patt {print text}
{print}
' input > output
Ответ 3
Вот пример того, как вставить строку перед строкой в файле:
Пример файла test.txt:
hello line 1
hello line 2
hello line 3
script:
sed -n 'H;${x;s/^\n//;s/hello line 2/hello new line\n&/;p;}' test.txt > test.txt.2
выходной файл test.txt.2
hello line 1
hello new line
hello line 2
hello line 3
NB! обратите внимание, что sed имеет как начало замены строки новой строки без пробела - это необходимо, иначе в результате в результате будет иметься пустая строка в начале
script находит строку, содержащую "hello line 2", затем вставляет новую строку выше - "hello new line"
объяснение команд sed:
sed -n:
suppress automatic printing of pattern space
H;${x;s/test/next/;p}
/<pattern>/ search for a <pattern>
${} do this 'block' of code
H put the pattern match in the hold space
s/ substitute test for next everywhere in the space
x swap the hold with the pattern space
p Print the current pattern hold space.
Ответ 4
Просто? От строки 12 до конца:
sed '12,$ s/.*Sysadmin.*/Linux Scripting\n&/' filename.txt