SED замяніць канец радка з тэкстам і цытатай

Я спрабую змяніць радок тыпу

DIRLIST="DIR/1 DIR/2 DIR/3"

ўключыць новы DIR/4, выкарыстоўваючы Баш скрыпт, дзе DIR/4 ўяўляе сабой аргумент каманднага радка

на дадзены момант, гэта мой код для замены

sed "#DIRLIST#s#$# $logFolder\"#g" compress_log.sh > tmpCompress

гэта павінна замяніць $ з утрыманнем LogFolder на кожнай радку, якая змяшчае DirList, і перанакіраваць яго на tmpCompress, ці не так?

Праблема я сутыкнуўся, я думаю, што з-за касую рысу і цытату і любіць.

Любая дапамога вельмі шануецца

0

8 адказы

У радку ніжэй будзе працаваць. гэта

  • Searches for all lines that have DIRLIST
  • Changes the " at the end of the line to....
  • "$logFolder" followed by ...
  • The " character

    sed '/DIRLIST/ s:"$:'"$logFolder"'":'

але было б лягчэй зразумець, калі я разбіць яго на кавалкі

sed '/DIRLIST/ s:"$:'            "$logFolder"             '":'

Калі ласка, памятайце, што вы можаце выкарыстоўваць два тыпу двукоссяў на адной лініі, і што мэта двукоссі, каб прадухіліць інтэрпрэтацыю адмысловых знакаў. У першай частцы я выкарыстоўваю адзінарныя двукоссі, таму што я хачу працытаваць як падвойныя двукоссі, і знак даляра. Другая частка Прыкладае ў падвойных двукоссі, так што $ інтэрпрэтуюцца як зменныя, так і ў выпадку, калі ёсць спецыяльны сімвал у значэнні пераменнага (калі яна не ўключае ў сябе прамую кішку). Трэцяя частка я выкарыстоўваю адзінарныя двукоссі заключыць падвойныя двукоссі і двукроп'е (апошняе двукроп'е s: стары: новы шаблону).

Я аддаю перавагу выкарыстоўваць «..» замест «...» у SED сцэнарыяў па звычцы. Гэта больш бяспечна.

2
дададзена

У радку ніжэй будзе працаваць. гэта

  • Searches for all lines that have DIRLIST
  • Changes the " at the end of the line to....
  • "$logFolder" followed by ...
  • The " character

    sed '/DIRLIST/ s:"$:'"$logFolder"'":'

але было б лягчэй зразумець, калі я разбіць яго на кавалкі

sed '/DIRLIST/ s:"$:'            "$logFolder"             '":'

Калі ласка, памятайце, што вы можаце выкарыстоўваць два тыпу двукоссяў на адной лініі, і што мэта двукоссі, каб прадухіліць інтэрпрэтацыю адмысловых знакаў. У першай частцы я выкарыстоўваю адзінарныя двукоссі, таму што я хачу працытаваць як падвойныя двукоссі, і знак даляра. Другая частка Прыкладае ў падвойных двукоссі, так што $ інтэрпрэтуюцца як зменныя, так і ў выпадку, калі ёсць спецыяльны сімвал у значэнні пераменнага (калі яна не ўключае ў сябе прамую кішку). Трэцяя частка я выкарыстоўваю адзінарныя двукоссі заключыць падвойныя двукоссі і двукроп'е (апошняе двукроп'е s: стары: новы шаблону).

Я аддаю перавагу выкарыстоўваць «..» замест «...» у SED сцэнарыяў па звычцы. Гэта больш бяспечна.

2
дададзена

Наступныя працы, а таксама

old_folder='DIR[/]1 DIR[/]2 DIR[/]3'
sed "/""${old_folder}""/"' s#$# '"$logFolder"'#'
1
дададзена
@ShadowFlame, ліквідаваны
дададзена аўтар iruvar, крыніца
так, але гэта запатрабавала б ведаць, якія тэчкі я ужо ўключаны, у той час як маё рашэнне павінна працаваць для невядомых тэчак, а таксама
дададзена аўтар ShadowFlame, крыніца

Наступныя працы, а таксама

old_folder='DIR[/]1 DIR[/]2 DIR[/]3'
sed "/""${old_folder}""/"' s#$# '"$logFolder"'#'
1
дададзена
@ShadowFlame, ліквідаваны
дададзена аўтар iruvar, крыніца
так, але гэта запатрабавала б ведаць, якія тэчкі я ужо ўключаны, у той час як маё рашэнне павінна працаваць для невядомых тэчак, а таксама
дададзена аўтар ShadowFlame, крыніца

Не ўпэўнены, што калі #DIRLIST # павінен адпавядаць шаблоне, /DirList/ будзе рабіць, хоць.

$ export logFolder=NEWDIR
$ echo 'DIRLIST="DIR/1 DIR/2 DIR/3"' | sed "/DIRLIST/ s#\"\$# $logFolder\"#g"
DIRLIST="DIR/1 DIR/2 DIR/3 NEWDIR"
1
дададзена
гэта робіць працу, але я не думаю, што вы можаце дадаць некалькі адказаў, так што дзякуй ў любым выпадку, але я збіраюся прыняць Bruces адказ, з-за занадта дадатковую інфармацыю.
дададзена аўтар ShadowFlame, крыніца

Не ўпэўнены, што калі #DIRLIST # павінен адпавядаць шаблоне, /DirList/ будзе рабіць, хоць.

$ export logFolder=NEWDIR
$ echo 'DIRLIST="DIR/1 DIR/2 DIR/3"' | sed "/DIRLIST/ s#\"\$# $logFolder\"#g"
DIRLIST="DIR/1 DIR/2 DIR/3 NEWDIR"
1
дададзена
гэта робіць працу, але я не думаю, што вы можаце дадаць некалькі адказаў, так што дзякуй ў любым выпадку, але я збіраюся прыняць Bruces адказ, з-за занадта дадатковую інфармацыю.
дададзена аўтар ShadowFlame, крыніца

Гэтая каманда будзе рабіць гэта:

sed -e "#DIRLIST# s#\"\$# $logFolder\"#g" compress_log.sh > tmpCompress

Прычына вашай версіі не атрымоўваецца, што «$ #» замяшчаецца лікам пазіцыйных аргументаў, для інтэрактыўных абалонак роўная нулю.

У выніку СЕПГ выконвае гэты скрыпт замест:

#DIRLIST#s#0 "#g

Вы маглі б заўважыць, што калі вы папярэднічаюцца ваша каманда з рэхам, як гэта:

echo sed "#DIRLIST#s#$# $logFolder\"#g" compress_log.sh

Каб пазбегнуць гэтага ўцёкаў «$» з зваротнай касой рысы.

Далей, як вам трэба дадаць новую тэчку ўнутры каціроўкі, вы павінны адпавядаць і замяніць апошнюю цытату, а таксама.

Акрамя таго, сцяг "г" ня трэба, бо ёсць толькі адзін «канец радка» адпавядае па «$» ў кожнай радку, таму ён не можа адпавядаць больш чым адзін раз.

1
дададзена
Гэта не працуе ў маёй сістэме. Вам трэба змяніць #DIRLIST # у /DirList/
дададзена аўтар Bruce Barnett, крыніца
дзякуй за інфармацыю, ужо прыняў іншы адказ, хоць.
дададзена аўтар ShadowFlame, крыніца

Гэтая каманда будзе рабіць гэта:

sed -e "#DIRLIST# s#\"\$# $logFolder\"#g" compress_log.sh > tmpCompress

Прычына вашай версіі не атрымоўваецца, што «$ #» замяшчаецца лікам пазіцыйных аргументаў, для інтэрактыўных абалонак роўная нулю.

У выніку СЕПГ выконвае гэты скрыпт замест:

#DIRLIST#s#0 "#g

Вы маглі б заўважыць, што калі вы папярэднічаюцца ваша каманда з рэхам, як гэта:

echo sed "#DIRLIST#s#$# $logFolder\"#g" compress_log.sh

Каб пазбегнуць гэтага ўцёкаў «$» з зваротнай касой рысы.

Далей, як вам трэба дадаць новую тэчку ўнутры каціроўкі, вы павінны адпавядаць і замяніць апошнюю цытату, а таксама.

Акрамя таго, сцяг "г" ня трэба, бо ёсць толькі адзін «канец радка» адпавядае па «$» ў кожнай радку, таму ён не можа адпавядаць больш чым адзін раз.

1
дададзена
Гэта не працуе ў маёй сістэме. Вам трэба змяніць #DIRLIST # у /DirList/
дададзена аўтар Bruce Barnett, крыніца
дзякуй за інфармацыю, ужо прыняў іншы адказ, хоць.
дададзена аўтар ShadowFlame, крыніца