대체하기 전에 sed 대체를 처리하는 방법

대체하기 전에 sed 대체를 처리하는 방법

다음과 같은 텍스트가 있다고 가정해 보겠습니다 My name is #1#!.

#1#사이에 무엇이 있는지에 따라 다른 것으로 바꾸고 싶습니다 #. 예를 들면 다음과 같습니다.

if [ $thing_between_hash -eq 1 ]; then
  subs=John
else
  subs=Mary
fi

그러면 출력은 다음과 같습니다.

My name is John!

한 번만 교체하면 되나요 sed? 어떻게?

답변1

다음 기능을 지원하는 sed를 사용하십시오 -r.

sed -r -e 's/#1#/John/g; s/#[^#]+#/Mary/g' <<< 'My name is #1#, not #5#!'

그렇지 않으면:

sed    -e 's/#1#/John/g; s/#[^#][^#]*#/Mary/g' <<< 'My name is #1#, not #5#!'

답변2

배시 사용:

something='My name is #1#!'
subs="John"

mod="${something/\#1\#/$subs}"

echo "$mod"

산출:

제 이름은 존이에요!

답변3

다음을 수행할 수 있습니다.

 [root@h2g2w ~]# subs=john
 [root@h2g2w ~]# echo may name is 1 | sed
> 's/1/'$subs'/' 
  may name is john 
 [root@h2g2w ~]#

관련 정보