๐ŸณDev/Issue

[sed/error] sed -i ์‚ฌ์šฉ ์‹œ, ๋ฐœ์ƒํ•˜๋Š” unterminated substitute in regular expression / undefined label / extra characters at the end of l command ์˜ค๋ฅ˜

fortune.00 2023. 6. 4. 16:12

๋ฌธ์ œ ์ƒํ™ฉ

blue-green ๋ฐฐํฌ ๊ตฌํ˜„์„ ์œ„ํ•ด nginx์˜ default.conf ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์—์„œ, sed -i ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

sed -i [suffix]

sed๋Š” stream editor์˜ ์•ฝ์ž๋กœ ํ‘œ์ค€ ์ž…๋ ฅ ๋˜๋Š” ํŒŒ์ผ์—์„œ ์˜ค๋Š” ํ…์ŠคํŠธ์— ๋Œ€ํ•œ ํŽธ์ง‘ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋•Œ -i ์˜ต์…˜์€ ํ‘œ์ค€ ์ถœ๋ ฅ์ด ์•„๋‹Œ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

sed -i 's/{๋ณ€๊ฒฝ์ „๋ฌธ์ž์—ด}/{๋ณ€๊ฒฝํ›„๋ฌธ์ž์—ด}/g' file

 

์œ„ ๋ช…๋ น์€ suffix๋Š” ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ๋ถ€์† ๋ช…๋ น์œผ๋กœ s, ํ”Œ๋ž˜๊ทธ๋Š” g๋ฅผ ์‚ฌ์šฉํ•ด, ํŒŒ์ผ ์•ˆ์˜ ํŠน์ • ๋ฌธ์ž๋ฅผ ์ „๋ถ€ ์น˜ํ™˜ํ•˜๊ณ ์ž ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์œ„ ๋ช…๋ น์–ด๋Š” ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ, ๋งฅ ์„œ๋ฒ„์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (ํŠน์ • ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ธฐ ๋ณด๋‹ค๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜.)

 

sed: 1: "nginx/default.conf": unterminated substitute in regular expression
sed: 1: "default.conf": undefined label 'efault.conf’

 

๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ธฐ๋„ ํ•œ๋‹ค.

sed: 1: "/path/to/file.txt": extra characters at the end of l command

 

ํ•ด๊ฒฐ ๊ณผ์ •

MacOS์™€ Linux์—์„œ sed๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „์„ ๊ฐ€์ง„๋‹ค, ๋”ฐ๋ผ์„œ i์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค

 

GNU(Linux์˜ ํ‘œ์ค€) sed์˜ ๊ฒฝ์šฐ

sed -i 's/{๋ณ€๊ฒฝ์ „๋ฌธ์ž์—ด}/{๋ณ€๊ฒฝํ›„๋ฌธ์ž์—ด}/g' file

 

BSD/MacOS sed์˜ ๊ฒฝ์šฐ

sed -i '' 's/{๋ณ€๊ฒฝ์ „๋ฌธ์ž์—ด}/{๋ณ€๊ฒฝํ›„๋ฌธ์ž์—ด}/g' file

 

Sed -i์˜ ์ž‘๋™ ๊ณผ์ •

sed -i๋Š” ํ‘œ์ค€ ์ถœ๋ ฅ์ด ์•„๋‹ˆ๋ผ ๋‚ด๋ถ€์—์„œ ์ž„์‹œ ํŒŒ์ผ์— ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ถœ๋ ฅ์ด ๋๋‚˜๋ฉด, ์ž„์‹œ ํŒŒ์ผ ์ด๋ฆ„์„ ์›๋ณธ ํŒŒ์ผ์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ์ด๋•Œ suffix๊ฐ€ ์žˆ์œผ๋ฉด, ์ž„์‹œ ํŒŒ์ผ์˜ ์ด๋ฆ„์ด ๋ฐ”๋€Œ๊ธฐ ์ „์—, ์›๋ณธ ํŒŒ์ผ ์ด๋ฆ„์— suffix๋ฅผ ํ™•์žฅ์ž๋กœ ํ•ด ๋ฐฑ์—… ์‚ฌ๋ณธ์„ ๋งŒ๋“ ๋‹ค.

 

์ด๋•Œ GNU sed๋Š” suffix๊ฐ€ ์„ ํƒ, BSD sed๋Š” ํ•„์ˆ˜์ด๋‹ค!

 

suffix๋ฅผ ๋ฐฑ์—…ํŒŒ์ผ์˜ ํ™•์žฅ์ž์ธ .bak๋กœ ์„ค์ •ํ•ด ๋ฐฑ์—… ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋ณด์ž.

GNU๋Š” -i.bak , BSD๋Š” -i.bak, -i .bak ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋งŒ์•ฝ์— suffix๋ฅผ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด, ๋ฐฑ์—…์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์›๋ณธ ํŒŒ์ผ์„ ๋ฎ์–ด์“ด๋‹ค.

GNU๋Š” -i ๋งŒ ์‚ฌ์šฉํ•ด์ค˜๋„ ๋˜์ง€๋งŒ, BSD๋Š” -i '' ์™€ ๊ฐ™์ด ๋นˆ ๋ฌธ์ž์—ด์„ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด๋•Œ ๋„์–ด์“ฐ๊ธฐ์— ์œ ์˜ํ•˜์ž.

 

๋งฅ๊ณผ ๋ฆฌ๋ˆ…์Šค๋ฅผ ํ˜ธํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ, Mac์—์„œ gnu sed๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์„ค์ •์„ ํ•ด์ฃผ๊ฑฐ๋‚˜

brew install gnu-sed --with-default-names

์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด์„œ os์— ๋”ฐ๋ผ, ๋ช…๋ น์–ด๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

์ถœ์ฒ˜

 

sed command with -i option (in-place editing) works fine on Ubuntu but not Mac

I know nothing about Sed but need this command (which works fine on Ubuntu) to work on a Mac OSX: sed -i "/ $domain .*#drupalpro/d" /etc/hosts I'm getting: sed: 1: "/etc/hosts": extra characters...

stackoverflow.com

 

 

sed, a stream editor

sed uses the POSIX basic regular expression syntax. According to the standard, the meaning of some escape sequences is undefined in this syntax; notable in the case of sed are \|, \+, \?, \`, \', \<, \>, \b, \B, \w, and \W. As in all GNU programs that use

www.gnu.org