Мне нужно использовать 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