Используя команду sed, измените строку на определенной строке на определенную строку

Используя команду sed, измените строку на определенной строке на определенную строку

Мне нужно использовать sed для изменения строки в файле только на 4-й строке, если она содержит строку с именем «test»

Итак, вот что я имею сейчас:

sed '/test/ s/abc/zz/g' sample

По сути, это позволит просмотреть строки и проверить, есть ли в них тест, а затем изменить abc на zz, если он есть в этой строке.

Но как это сделать только для 4-й линии?

Я пытался

 sed '/test/ 4s/abc/zz/g' sample

Добавляю 4 перед s, но это не работает.

решение1

В одну сторону:

sed -e '4 {
  /test/s/abc/zz/g
}' <file

решение2

Я не уверен, но сработает ли что-то подобное?

awk 'NR==4 {print $0}' filename.txt | grep 'test' | sed 's/abc/xyz/g'

решение3

другой путь:

сначала найдите строку со строкой «test»:

LINE=$(grep "test" file -n | awk '{print $1}' | cut -d ':' -f1 | xargs)

затем, используя эту переменную LINE, выполните:

sed файл "s$LINEs/abc/zzz/g"

решение4

Вы можете использовать это

sed -i '4s/old_text/new_text/g' file_name

Связанный контент