2016-03-23 2 views
-1

Я попытался сделать Perl скрипт добавления новой строки в конец текстового файла, а затем записать в следующем:Perl скрипт для добавления новой строки в конец текстового файла

/бен/ложь

файл выглядит следующим образом:

/бен/ш
/бен/тир
/бен/Баш
/бен/rbash
/USR/бен/tmux
/USR/бен/экран

Я попытался запустить следующий сценарий:

Perl -pi -e «s /// USR // бен // экран /// USR // bin // screen "\ n" // bin // false/g '/ etc/shells

Но не повезло. Он не принимает новую строку и просто возвращает ошибку для синтаксиса. Вы можете помочь!?

+3

'эхо/бен/ложь >>/и т.д./shells' – sidyll

+0

Ого .. Это просто !? Пожалуйста, сделайте это ответом, чем я его одобрю :) –

+1

Нежное напоминание о [отметьте ответы соответственно] (http://stackoverflow.com/help/someone-answers) ... – zdim

ответ

1

Это:

s///usr//bin//screen///usr//bin//screen"\n"//bin//false/g 

Действительно синтаксические ошибки. Исходя из того, что вы использовали двойные столбцы на пути, где вы должны были сбежать от них (\/), а также странная строка новой строки в середине. Вы также можете использовать другие разделители , а не косую черту, чтобы избежать необходимости избегать всех.

s!/usr/bin/screen\n!/usr/bin/screen\n/bin/false! 

Кроме того, не забудьте закрыть свою последнюю строку. И вы можете также использовать \K (см perldoc perlre подробности), чтобы упростить регулярное выражение, с окончательным результатом:

s!/usr/bin/screen\n\K!/bin/false\n! 

Но в любом случае, это, кажется излишним. Вы можете использовать функции оболочки повторить линию и перенаправить в файл, путем добавления с >>:

echo /bin/false >> /etc/shells 
Смежные вопросы