Это действительно довольно просто в awk
, используя sub
. У вас есть фундаментальное недопонимание того, как работает awk
. (кроме как с расширением GNU awk FIELDWIDTHS
), awk
не действует на символы, оно действует на поля , обозначенные как FS
(разделитель полей, по умолчанию - пробел),Таким образом, для работы на "rutrum,"
вы хотели бы работать с полем 3 rd в записи 2 nd . Вы можете идентифицировать вторую строку, используя FNR == 2
(номер записи файла) или NR
для (номера записи) всех обрабатываемых файлов.
Решение awk
для вашего случая будет:
awk 'FNR == 2 {sub(/^rutrum/,"fermentum",$3)}1' file
Где sub(/find_regex/,"replace"[,target])
обозначает опциональную цель как поле 3 rd .
Пример использования / Вывод
С исходным текстом в file
вы получите:
$ awk 'FNR == 2 {sub(/^rutrum/,"fermentum",$3)}1' file
Lorem ipsum dolor sit amet
sed quam fermentum, interdum sodales ex
pellentesque urna placerat
Редактировать - использовать только номера строк и столбцов
Если вы не можете использоватьрегулярные выражения и могут использовать только номер строки и номер столбца, тогда вы все еще можете использовать awk
с substr
и конкатенацию строк. По сути, вы просто построите строку 2 и из первых 9 символов строки плюс "fermentum"
плюс 16 символов, например,
awk 'FNR == 2 {s=substr($0,1,9); s=s "fermentum"; s=s substr($0,16); $0=s}1' file
над каждой из трех частейобъединяются в строку s
, а затем строка 2 nd устанавливается равной новой объединенной строке. (вывод такой же, как указано выше)