Самое лучшее, что нужно сделать, это резервное копирование ваших файлов на внешний жесткий диск. Это самый лучший способ убедиться, что во время процесса ничего не получится с вашими файлами.
Простой способ: если вы создадите резервную копию всех ваших файлов на внешнем жестком диске, самым простым способом будет «заменить Windows» Ubuntu "
Трудный способ сохранить оба раздела: Для вашей конфигурации вам нужно будет подумать о том, что администратор раздела вручную (на« что-то еще », если моя догадка правильная, как чего вы видите). Затем на вашем основном разделе (том, который будет иметь тот же размер, что и ваш диск с Windows «C» (Linux не распознает диски как «C» или «D»), щелкните правой кнопкой мыши и выберите «формат». Выберите «ext4» в качестве файловой системы и «/» в качестве точки монтирования. Выберите «/ dev / sda» в качестве точки захвата. Затем проверьте.
Хотя вы упоминали sed, это несколько awk -y задач:
awk -v pat="Fred Flintstone" '$0 ~ pat {count++;\
if (count == 2) { $0 = $0" someString" ;} ;}; 1' file.txt
-v pat="Fred Flintstone" сохраняет шаблон Regex в соответствии с переменной pat, которая будет использоваться внутри awk выражения $0 ~ pat проверяет запись против pat для соответствия; если согласовано, переменная count увеличивается на 1, а если count равно 2, запись сбрасывается как имеющая текущий контент плюс someString ({count++; if (count == 2) { $0 = $0" someString" ;} ;}) 1 - это идиома; поскольку это правда, все записи будут напечатаны Пример:
% cat file.txt
Fred Flintstone
Johnson Stone
Fred Flintstone
Fred Flintstone
Michael Clark
% awk -v pat="Fred Flintstone" '$0 ~ pat {count++; if (count == 2) { $0 = $0" someString" ;} ;}; 1' file.txt
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Хотя вы упоминали sed, это несколько awk -y задач:
awk -v pat="Fred Flintstone" '$0 ~ pat {count++;\
if (count == 2) { $0 = $0" someString" ;} ;}; 1' file.txt
-v pat="Fred Flintstone" сохраняет шаблон Regex в соответствии с переменной pat, которая будет использоваться внутри awk выражения $0 ~ pat проверяет запись против pat для соответствия; если согласовано, переменная count увеличивается на 1, а если count равно 2, запись сбрасывается как имеющая текущий контент плюс someString ({count++; if (count == 2) { $0 = $0" someString" ;} ;}) 1 - это идиома; поскольку это правда, все записи будут напечатаны Пример:
% cat file.txt
Fred Flintstone
Johnson Stone
Fred Flintstone
Fred Flintstone
Michael Clark
% awk -v pat="Fred Flintstone" '$0 ~ pat {count++; if (count == 2) { $0 = $0" someString" ;} ;}; 1' file.txt
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Хотя вы упоминали sed, это несколько awk -y задач:
awk -v pat="Fred Flintstone" '$0 ~ pat {count++;\
if (count == 2) { $0 = $0" someString" ;} ;}; 1' file.txt
-v pat="Fred Flintstone" сохраняет шаблон Regex в соответствии с переменной pat, которая будет использоваться внутри awk выражения $0 ~ pat проверяет запись против pat для соответствия; если согласовано, переменная count увеличивается на 1, а если count равно 2, запись сбрасывается как имеющая текущий контент плюс someString ({count++; if (count == 2) { $0 = $0" someString" ;} ;}) 1 - это идиома; поскольку это правда, все записи будут напечатаны Пример:
% cat file.txt
Fred Flintstone
Johnson Stone
Fred Flintstone
Fred Flintstone
Michael Clark
% awk -v pat="Fred Flintstone" '$0 ~ pat {count++; if (count == 2) { $0 = $0" someString" ;} ;}; 1' file.txt
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Хотя вы упоминали sed, это несколько awk -y задач:
awk -v pat="Fred Flintstone" '$0 ~ pat {count++;\
if (count == 2) { $0 = $0" someString" ;} ;}; 1' file.txt
-v pat="Fred Flintstone" сохраняет шаблон Regex в соответствии с переменной pat, которая будет использоваться внутри awk выражения $0 ~ pat проверяет запись против pat для соответствия; если согласовано, переменная count увеличивается на 1, а если count равно 2, запись сбрасывается как имеющая текущий контент плюс someString ({count++; if (count == 2) { $0 = $0" someString" ;} ;}) 1 - это идиома; поскольку это правда, все записи будут напечатаны Пример:
% cat file.txt
Fred Flintstone
Johnson Stone
Fred Flintstone
Fred Flintstone
Michael Clark
% awk -v pat="Fred Flintstone" '$0 ~ pat {count++; if (count == 2) { $0 = $0" someString" ;} ;}; 1' file.txt
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Эта простая команда sed позволяет выборочно производить изменение без использования циклов (он использует ветку от конца) или требует расширения GNU или сразу считывает весь файл:
sed -r '/Fred Flintstone/ {x; s/$/#/; /^#{2}$/ {x; s/.*/& someString/; b}; x}'
1] Объяснение: -r - использовать расширенное регулярное выражение /Fred Flintstone/ - для строк, соответствующих этому шаблону: x - обменивать пространство и пространство удержания (активировать счетчик) s/$/#/ - добавить символ в счетчик /^#{2}$/ - когда счетчик равен 2 (замените любое значение) x обменивайте пространство шаблона и удерживайте пробел (активируйте подсчитанную строку ввода) s/.*/& someString/ - добавьте строку в нужную строку b - пропустить до конца обработки для этой строки, чтобы ее можно было напечатать x - обменять пространство шаблона и удерживать пространство (активировать строки, соответствующие строке, но не счету) Уровни отступов в объяснении указывают уровни вставки фигурных скобок.
Все остальные строки проходят без обработки и печатаются.
awk '/Fred Flintstone/&& ++seen==2{ $0=$0"someString" };1 ' infile
Это будет печатать каждую строку awk reads (1, которая всегда является истинным условием, приведет к тому, что каждая строка awk будет прочитана / продолжена) и увеличьте значение переменной seen, когда строка, соответствующая [ f4], и как только вторая строка будет соответствовать Fred Flintstone (теперь seen==2), она будет печатать эту строку с добавленным "someString" в конце.
Вот способ сделать это в sed, не опуская весь файл в память:
найти первое вхождение шаблона добавить следующую строку N в пространство паттерна, чтобы заменить второе появление ветви шаблона назад и добавление другой строки, если совпадение не выполнено Ta$q завершает цикл, если конец файла достигнут без соответствия.
Итак,
sed '/Fred Flintstone/ {:a; $q; N; s//& someString/2; Ta;}' File1
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Хотя T является расширением GNU, вы можете сделать то же самое в POSIX sed, используя t; ba
Hmm. .. подумав об этом еще немного, он фактически добавит новый текст в любое другое событие - не только второе. Если вам действительно нужно использовать замену только второго вхождения, то единственным способом, который я могу это сделать, будет:
найти первое вхождение шаблона и изменить новый первый экземпляр добавляет следующую строку N в пространство шаблонаGNU sed предоставляет трюк, чтобы обратиться к Хм ... после размышления об этом более того, он фактически добавит новый текст к любому другому вхождению - не только второй экземпляр шаблона
0,/pattern/
So
sed -e '0,/Fred Flintstone/ s//Barney Rubble/' \
-e '0,/Fred Flintstone/ s//& someString/' \
-e '0,/Barney Rubble/ s//Fred Flintstone/
' File1
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Если вы надеваете Не обращайте внимание на ed, тогда вы можете обратиться к второму экземпляру более непосредственно, перейдя в первую строку, а затем перейдя от одного экземпляра к следующему:
ed -s File1 << \EOF
1;#
/Fred Flintstone/,/Fred Flintstone/ s//& someString/
,p
q
EOF
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
или как однострочный 22]
printf '1;#\n/Fred Flintstone/,/Fred Flintstone/ s//& someString/\n,p\n' | ed -s File1
Вы можете сделать версию ed на месте, заменив ,p на w
(Это предшественник vi и все еще является частью vi.)
printf '%s\n' '0/Fred Flintstone///s/$/ someString/' x | ex filename
3] Магия здесь заключается в том, что в отличие от Sed, Awk и подобных инструментов, ex не запускает код на каждой строке. Вы можете перемещать курсор вокруг, давать команды и т. Д. В этом случае мы укажем номер строки 0 (что гарантирует, что Фред Флинтстон на первой строке будет учтен), а затем регулярное выражение /Fred Flintstone/, которое ссылается на первую строку в файле, соответствующем этому регулярному выражению, за которым следует другое регулярное выражение //, которое, будучи пустым, повторно использует последнее регулярное выражение и поэтому ссылается на вторую строку в файле, который соответствует; а затем мы используем команду s, которую вы уже знаете.
Команда x означает сохранение любых изменений и выход.
Мы используем printf для подачи команд на ex.
Эта простая команда sed позволяет выборочно производить изменение без использования циклов (он использует ветку от конца) или требует расширения GNU или сразу считывает весь файл:
sed -r '/Fred Flintstone/ {x; s/$/#/; /^#{2}$/ {x; s/.*/& someString/; b}; x}'
Объяснение:
-r - использовать расширенное регулярное выражение /Fred Flintstone/ - для строк, соответствующих этому шаблону: x - обменивать пространство и пространство удержания (активировать счетчик) s/$/#/ - добавить символ в счетчик /^#{2}$/ - когда счетчик равен 2 (замените любое значение) x обменивайте пространство шаблона и удерживайте пробел (активируйте подсчитанную строку ввода) s/.*/& someString/ - добавьте строку в нужную строку b - пропустить до конца обработки для этой строки, чтобы ее можно было напечатать x - обменять пространство шаблона и удерживать пространство (активировать строки, соответствующие строке, но не счету)Уровни отступов в объяснении указывают уровни вставки фигурных скобок.
Все остальные строки проходят без обработки и печатаются.
Вот способ сделать это в sed, не опуская весь файл в память:
найти первое вхождение шаблона добавить следующую строку N в пространство паттерна, чтобы заменить второе появление ветви шаблона назад и добавление другой строки, если совпадение не выполнено Ta$q завершает цикл, если конец файла достигнут без соответствия.
Итак,
sed '/Fred Flintstone/ {:a; $q; N; s//& someString/2; Ta;}' File1
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Хотя T является расширением GNU, вы можете сделать то же самое в POSIX sed, используя t; ba
Hmm. .. подумав об этом еще немного, он фактически добавит новый текст в любое другое событие - не только второе. Если вам действительно нужно использовать замену только второго вхождения, то единственным способом, который я могу это сделать, будет:
найти первое вхождение шаблона и изменить новый первый экземпляр добавляет следующую строку N в пространство шаблонаGNU sed дает трюк, чтобы обратиться к Хм ... после размышления об этом более того, он фактически добавит новый текст к любому другому вхождению - не только второй экземпляр шаблона
0,/pattern/
So
sed -e '0,/Fred Flintstone/ s//Barney Rubble/' \
-e '0,/Fred Flintstone/ s//& someString/' \
-e '0,/Barney Rubble/ s//Fred Flintstone/
' File1
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Если вы надеваете Не обращайте внимание на ed, тогда вы можете обратиться к второму экземпляру более непосредственно, перейдя в первую строку, а затем перейдя от одного экземпляра к следующему:
ed -s File1 << \EOF
1;#
/Fred Flintstone/,/Fred Flintstone/ s//& someString/
,p
q
EOF
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
или как однострочный
printf '1;#\n/Fred Flintstone/,/Fred Flintstone/ s//& someString/\n,p\n' | ed -s File1
Вы можете сделать версию ed на месте, заменив ,p на w
(Это предшественник vi и все еще является частью vi.)
printf '%s\n' '0/Fred Flintstone///s/$/ someString/' x | ex filename
Магия здесь заключается в том, что в отличие от Sed, Awk и подобных инструментов, ex не запускает код на каждой строке. Вы можете перемещать курсор вокруг, давать команды и т. Д.
В этом случае мы укажем номер строки 0 (что гарантирует, что Фред Флинтстон на первой строке будет учтен), а затем регулярное выражение /Fred Flintstone/, которое ссылается на первую строку в файле, соответствующем этому регулярному выражению, за которым следует другое регулярное выражение //, которое, будучи пустым, повторно использует последнее регулярное выражение и поэтому ссылается на вторую строку в файле, который соответствует; а затем мы используем команду s, которую вы уже знаете.
Команда x означает сохранение любых изменений и выход.
Мы используем printf для подачи команд на ex.
Пересмотренный ответ, чтобы предотвратить впрыскивание кода в обратную косую черту, а также косые черты, кавычки при использовании awk-переменных awk -v variable ... или оболочки awk '...' variable="$value", поскольку awk выполняет обработку последовательности вызовов C на значениях, переданных с помощью -v variable= или оболочки variable=$value; поэтому оболочка variable='\\n' изменится на \n в awk).
pattern="${patt//\\/\\\\}" awk '
$0 ~ ENVIRON["pattern"]{ seen++ } seen==2 { $0 = $0 "something"};1' infile
для нижнего входа и awk :
another break line
Johnson Stone
\"Fred //\\Flintstone' SOMETHING will goes here ...
\"Fred //\\Flintstone'
Michael Clark
в переменной под названием patt
$ echo "$patt"
\"Fred //\\Flintstone'
Выход:
\"Fred //\\Flintstone'
another break line
Johnson Stone
\"Fred //\\Flintstone' SOMETHING will goes here ...something
\"Fred //\\Flintstone'
Michael Clark
позже вам понадобится передать строку something в качестве переменной, и вам нужно будет использовать что-то вроде edit=$somesting и использовать ENVIRON["edit"] там.
pattern="${patt//\\/\\\\}" edit="$something" awk '
$0 ~ ENVIRON["pattern"]{ seen++ } seen==2 { $0 = $0 ENVIRON["edit"]};1' infile
Эта простая команда sed позволяет выборочно производить изменение без использования циклов (он использует ветку от конца) или требует расширения GNU или сразу считывает весь файл:
sed -r '/Fred Flintstone/ {x; s/$/#/; /^#{2}$/ {x; s/.*/& someString/; b}; x}'
Объяснение:
-r - использовать расширенное регулярное выражение /Fred Flintstone/ - для строк, соответствующих этому шаблону: x - обменивать пространство и пространство удержания (активировать счетчик) s/$/#/ - добавить символ в счетчик /^#{2}$/ - когда счетчик равен 2 (замените любое значение) x обменивайте пространство шаблона и удерживайте пробел (активируйте подсчитанную строку ввода) s/.*/& someString/ - добавьте строку в нужную строку b - пропустить до конца обработки для этой строки, чтобы ее можно было напечатать x - обменять пространство шаблона и удерживать пространство (активировать строки, соответствующие строке, но не счету)Уровни отступов в объяснении указывают уровни вставки фигурных скобок.
Все остальные строки проходят без обработки и печатаются.
Вот способ сделать это в sed, не опуская весь файл в память:
найти первое вхождение шаблона добавить следующую строку N в пространство паттерна, чтобы заменить второе появление ветви шаблона назад и добавление другой строки, если совпадение не выполнено Ta$q завершает цикл, если конец файла достигнут без соответствия.
Итак,
sed '/Fred Flintstone/ {:a; $q; N; s//& someString/2; Ta;}' File1
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Хотя T является расширением GNU, вы можете сделать то же самое в POSIX sed, используя t; ba
Hmm. .. подумав об этом еще немного, он фактически добавит новый текст в любое другое событие - не только второе. Если вам действительно нужно использовать замену только второго вхождения, то единственным способом, который я могу это сделать, будет:
найти первое вхождение шаблона и изменить новый первый экземпляр добавляет следующую строку N в пространство шаблонаGNU sed дает трюк, чтобы обратиться к Хм ... после размышления об этом более того, он фактически добавит новый текст к любому другому вхождению - не только второй экземпляр шаблона
0,/pattern/
So
sed -e '0,/Fred Flintstone/ s//Barney Rubble/' \
-e '0,/Fred Flintstone/ s//& someString/' \
-e '0,/Barney Rubble/ s//Fred Flintstone/
' File1
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Если вы надеваете Не обращайте внимание на ed, тогда вы можете обратиться к второму экземпляру более непосредственно, перейдя в первую строку, а затем перейдя от одного экземпляра к следующему:
ed -s File1 << \EOF
1;#
/Fred Flintstone/,/Fred Flintstone/ s//& someString/
,p
q
EOF
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
или как однострочный
printf '1;#\n/Fred Flintstone/,/Fred Flintstone/ s//& someString/\n,p\n' | ed -s File1
Вы можете сделать версию ed на месте, заменив ,p на w
(Это предшественник vi и все еще является частью vi.)
printf '%s\n' '0/Fred Flintstone///s/$/ someString/' x | ex filename
Магия здесь заключается в том, что в отличие от Sed, Awk и подобных инструментов, ex не запускает код на каждой строке. Вы можете перемещать курсор вокруг, давать команды и т. Д.
В этом случае мы укажем номер строки 0 (что гарантирует, что Фред Флинтстон на первой строке будет учтен), а затем регулярное выражение /Fred Flintstone/, которое ссылается на первую строку в файле, соответствующем этому регулярному выражению, за которым следует другое регулярное выражение //, которое, будучи пустым, повторно использует последнее регулярное выражение и поэтому ссылается на вторую строку в файле, который соответствует; а затем мы используем команду s, которую вы уже знаете.
Команда x означает сохранение любых изменений и выход.
Мы используем printf для подачи команд на ex.
Пересмотренный ответ, чтобы предотвратить впрыскивание кода в обратную косую черту, а также косые черты, кавычки при использовании awk-переменных awk -v variable ... или оболочки awk '...' variable="$value", поскольку awk выполняет обработку последовательности вызовов C на значениях, переданных с помощью -v variable= или оболочки variable=$value; поэтому оболочка variable='\\n' изменится на \n в awk).
pattern="${patt//\\/\\\\}" awk '
$0 ~ ENVIRON["pattern"]{ seen++ } seen==2 { $0 = $0 "something"};1' infile
для нижнего входа и awk :
another break line
Johnson Stone
\"Fred //\\Flintstone' SOMETHING will goes here ...
\"Fred //\\Flintstone'
Michael Clark
в переменной под названием patt
$ echo "$patt"
\"Fred //\\Flintstone'
Выход:
\"Fred //\\Flintstone'
another break line
Johnson Stone
\"Fred //\\Flintstone' SOMETHING will goes here ...something
\"Fred //\\Flintstone'
Michael Clark
позже вам понадобится передать строку something в качестве переменной, и вам нужно будет использовать что-то вроде edit=$somesting и использовать ENVIRON["edit"] там.
pattern="${patt//\\/\\\\}" edit="$something" awk '
$0 ~ ENVIRON["pattern"]{ seen++ } seen==2 { $0 = $0 ENVIRON["edit"]};1' infile
Эта простая команда sed позволяет выборочно производить изменение без использования циклов (он использует ветку от конца) или требует расширения GNU или сразу считывает весь файл:
sed -r '/Fred Flintstone/ {x; s/$/#/; /^#{2}$/ {x; s/.*/& someString/; b}; x}'
Объяснение:
-r - использовать расширенное регулярное выражение /Fred Flintstone/ - для строк, соответствующих этому шаблону: x - обменивать пространство и пространство удержания (активировать счетчик) s/$/#/ - добавить символ в счетчик /^#{2}$/ - когда счетчик равен 2 (замените любое значение) x обменивайте пространство шаблона и удерживайте пробел (активируйте подсчитанную строку ввода) s/.*/& someString/ - добавьте строку в нужную строку b - пропустить до конца обработки для этой строки, чтобы ее можно было напечатать x - обменять пространство шаблона и удерживать пространство (активировать строки, соответствующие строке, но не счету)Уровни отступов в объяснении указывают уровни вставки фигурных скобок.
Все остальные строки проходят без обработки и печатаются.
Вот способ сделать это в sed, не опуская весь файл в память:
найти первое вхождение шаблона добавить следующую строку N в пространство паттерна, чтобы заменить второе появление ветви шаблона назад и добавление другой строки, если совпадение не выполнено Ta$q завершает цикл, если конец файла достигнут без соответствия.
Итак,
sed '/Fred Flintstone/ {:a; $q; N; s//& someString/2; Ta;}' File1
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Хотя T является расширением GNU, вы можете сделать то же самое в POSIX sed, используя t; ba
Hmm. .. подумав об этом еще немного, он фактически добавит новый текст в любое другое событие - не только второе. Если вам действительно нужно использовать замену только второго вхождения, то единственным способом, который я могу это сделать, будет:
найти первое вхождение шаблона и изменить новый первый экземпляр добавляет следующую строку N в пространство шаблонаGNU sed предоставляет трюк, чтобы обратиться к Хм ... после размышления об этом более того, он фактически добавит новый текст к любому другому вхождению - не только второй экземпляр шаблона
0,/pattern/
So
sed -e '0,/Fred Flintstone/ s//Barney Rubble/' \
-e '0,/Fred Flintstone/ s//& someString/' \
-e '0,/Barney Rubble/ s//Fred Flintstone/
' File1
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
Если вы надеваете Не обращайте внимание на ed, тогда вы можете обратиться к второму экземпляру более непосредственно, перейдя в первую строку, а затем перейдя от одного экземпляра к следующему:
ed -s File1 << \EOF
1;#
/Fred Flintstone/,/Fred Flintstone/ s//& someString/
,p
q
EOF
Fred Flintstone
Johnson Stone
Fred Flintstone someString
Fred Flintstone
Michael Clark
или как однострочный
printf '1;#\n/Fred Flintstone/,/Fred Flintstone/ s//& someString/\n,p\n' | ed -s File1
Вы можете сделать версию ed на месте, заменив ,p на w
(Это предшественник vi и все еще является частью vi.)
printf '%s\n' '0/Fred Flintstone///s/$/ someString/' x | ex filename
Магия здесь заключается в том, что в отличие от Sed, Awk и подобных инструментов, ex не запускает код на каждой строке. Вы можете перемещать курсор вокруг, давать команды и т. Д.
В этом случае мы укажем номер строки 0 (что гарантирует, что Фред Флинтстон на первой строке будет учтен), а затем регулярное выражение /Fred Flintstone/, которое ссылается на первую строку в файле, соответствующем этому регулярному выражению, за которым следует другое регулярное выражение //, которое, будучи пустым, повторно использует последнее регулярное выражение и поэтому ссылается на вторую строку в файле, который соответствует; а затем мы используем команду s, которую вы уже знаете.
Команда x означает сохранение любых изменений и выход.
Мы используем printf для подачи команд на ex.
Пересмотренный ответ, чтобы предотвратить впрыскивание кода в обратную косую черту, а также косые черты, кавычки при использовании awk-переменных awk -v variable ... или оболочки awk '...' variable="$value", поскольку awk выполняет обработку последовательности вызовов C на значениях, переданных с помощью -v variable= или оболочки variable=$value; поэтому оболочка variable='\\n' изменится на \n в awk).
pattern="${patt//\\/\\\\}" awk '
$0 ~ ENVIRON["pattern"]{ seen++ } seen==2 { $0 = $0 "something"};1' infile
для нижнего входа и awk :
another break line
Johnson Stone
\"Fred //\\Flintstone' SOMETHING will goes here ...
\"Fred //\\Flintstone'
Michael Clark
в переменной под названием patt
$ echo "$patt"
\"Fred //\\Flintstone'
Выход:
\"Fred //\\Flintstone'
another break line
Johnson Stone
\"Fred //\\Flintstone' SOMETHING will goes here ...something
\"Fred //\\Flintstone'
Michael Clark
позже вам понадобится передать строку something в качестве переменной, и вам нужно будет использовать что-то вроде edit=$somesting и использовать ENVIRON["edit"] там.
pattern="${patt//\\/\\\\}" edit="$something" awk '
$0 ~ ENVIRON["pattern"]{ seen++ } seen==2 { $0 = $0 ENVIRON["edit"]};1' infile