다음과 같은 텍스트가 있다고 가정해 보겠습니다 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 ~]#