Дисковод Windows показывает все значки с & ldquo; X & rdquo; меченый!

Вот способ сделать это в 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

0
задан 16 March 2012 в 00:37

1 ответ

Это означает, что у вас нет необходимых разрешений для записи в файлы на диске Windows. У Ubuntu есть вики на разрешениях файлов. Тем не менее, существует отличная программа под названием pysdm, которая позволяет быстро и легко изменять права доступа к файлам. Он доступен через репозитории Ubuntu и, следовательно, может быть установлен через sudo apt-get installed pysdm. Снимок экрана:

Более подробную информацию можно найти на домашней странице проекта Ubuntu имеет вики о разрешениях файлов. . Надеюсь, что это поможет!

2
ответ дан 25 May 2018 в 13:28

Другие вопросы по тегам:

Похожие вопросы: