У меня есть простой BSD SED (не GNU). Это то, что я бегу. Он не работает в последней команде sed
. Ошибки: строка длиннее 8 символов; и Label N недействителен или что-то в этом роде. Это не весь код - только часть, которая не:BSD `sed`: запуск нескольких команд` sed` изнутри оболочки: заменить N-е вхождение
set -x
chg()
{
file=$1
sed ":1
N
$!b1
s/)/,col1)/5 " $file > tmp && mv tmp $file
}
chg $f
sed: 0602-404 Function N cannot be parsed for both above and below
Я попытался
set -x
chg()
{
file=$1
sed ': 1 \
N \
$!b1 \
s/)/,col1)/5' $file > tmp && mv tmp $file
}
chg $f
Та же команда будет работать в командной строке
sed ': 1 <enter>
N <enter> etc
Как я исправить это ? Я хочу пятое появление )
быть заменен ,col)
,
sed -e $':x\nN;$!bx\ns/)/,col1)/5'
спасибо. Выше 1 лайнер не работает
по какой-то причине последний бит /5
на СЭД на лайнеры никогда не работают для меня на AIX
Input
#more sdat
) from (d , bd , c , d blah
someblah, blah) as
somebla, lah)
as
(some other pos)
dada
Выход
sed -e ':x' -e 'N;$!bx' -e 's/)/,col1)/5' sdat
) from (d , bd , c , d blah
someblah, blah) as
somebla, lah)
as
(some other pos)
dada
<br>
Выполняет ли ваш скрипт то же 'sed', что и в командной строке? Каков результат из 'set -x'? Что такое * точное сообщение об ошибке? – tripleee
Тангенциально вы должны использовать двойные кавычки вокруг любой переменной, которая содержит имя файла. – tripleee
Также между двоеточием и меткой не допускаются пробелы. Это должно быть ': 1' вместо': 1'. Другой проблемой может быть пространство, которое вы помещаете перед каждой строкой в первом примере. –