SED: синтаксична помилка в рядку 19 сценарію.


0

Я використовую цю команду, щоб видалити кілька входжень рядка в моєму скрипті, і він просто працює відмінно, коли я запускаю його в командному рядку. Однак, коли я використовую цю лінію в моєму perl скрипті він викидає помилку SED: синтаксична помилка в script.pl рядку 19, біля "; $ '". Нижче наведено рядок мого сценарію. Я спробував вирватися з $, але це допомагає

sed '/<\/data_item>/{N;/<\/data_item>$/{N;$'!'{s/\n//;D}}}' $WX;


sed не є частиною Perl. Але я дам вам користь сумніву і припустимо, що ви оголосили, що ваша власна підпрограма викликана sed в іншому місці сценарію. У якому командному рядку ви говорите, що це працювало? Я просто спробував його в Bash, і це дає помилку. Треба сказати, що я збентежений знаком оклику ! напівдорозі. Можливо, ви могли б дати оригінальну версію "командного рядка" і пояснити, що ви намагаєтеся зробити.
Lqueryvg

На жаль, я використовую тут зворотні посилання. У мене є інші прості команди sed в моєму perl скрипті, і вони просто працюють відмінно .. У вищезазначеному сценарії perl вказує на soemthing навколо цієї частини $ / {N; $ '!' {S / n //; D}}} ' і викидає помилку
user3614491

Давайте розглянемо одну з цих команд "sed" з іншої частини вашого скрипта Perl, який працює нормально.
Lqueryvg

Відповіді:


0

ОК, що дає вам користь від сумнівів (ви визначили, що ваша власна підпрограма викликана sed ), вираз "Perl" розбивається таким чином:

sed                                           # A call to a subroutine called "sed"
                                              # that you've defined ?

'/<\/data_item>/{N;/<\/data_item>$/{N;$'   # A string surrounded by single quotes

!                        # an exclamation mark

'{s/\n//;D}}}'           # another string surrounded by single quotes

$WX;                     # a scalar variable called "WX"

Фактична помилка синтаксису, яку ви отримуєте, пов'язана зі знаком оклику. У Perl ви не можете просто помістити символи за межі рядків і зв'язати їх з оточуючими рядками, як ви можете в оболонці.

Навіть в оболонці, я не впевнений, що лінія, як ви цитували, працюватиме. Тому, я думаю, вам дійсно потрібно розширити свій початковий запитання, щоб просунутися в цьому.


Насправді на оболонці він працює тільки з одинарними лапками навколо $ '!' в іншому випадку вона кидає іншу помилку. Інші приклади в perl-скрипті sed -i '2,\${/xml version/d;}' $WX ; sed -i '3,\${/top/{N;d;}}' $WX ; sed -i '3s/=.*\$/="check">/' $WX; і всі вони просто працюють добре.
user3614491

Добре, має більше сенсу тепер я можу побачити backticks. Схоже, вам доведеться уникнути декількох символів тут або там. Будь ласка, вкажіть точну команду, яка працювала з командного рядка. Я все ще збентежений цим знаком оклику.
Lqueryvg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.