Bash: 조건에 따라 중괄호 제거

Bash: 조건에 따라 중괄호 제거

아래 문자열에서 중괄호를 제거하고 싶지만 * 중괄호가 그 사이에 있는 경우에만 가능합니다.

이 주제에 대해 많은 답변을 찾았지만 제 시나리오에서는 조건을 충족하는 중괄호만 제거하고 싶습니다 {*} --> *.

name,apple,price,{50 70 80 80},color,{*}
name,orange,price,{*},color,{80 30 40}

예상 출력:

name,apple,price,{50 70 80 80},color,*
name,orange,price,*,color,{80 30 40}

도와주세요. 미리 감사드립니다.

답변1

sed의 명령을 사용하십시오 s(대체로). 에는 중괄호를 포함 하지만 : regexp에는 포함하지 않습니다 .replacement

sed 's/{\*}/*/g'

답변2

그냥 강타해

line='name,orange,price,{*},color,{80 30 40}'
s='{*}'
echo "${line//"$s"/*}"
name,orange,price,*,color,{80 30 40}

s변수가 필요하지 않도록 이스케이프하는 방법을 모르겠습니다 .

큰따옴표가 필요합니다. 그렇지 않으면 다음과 같은 결과가 나타납니다.

$ echo "${line//$s/*}"
name,orange,price,*

답변3

주문하다

sed "/{\*}/s/{\*}/*/g" filename

산출

name,apple,price,{50 70 80 80},color,*
name,orange,price,*,color,{80 30 40}

방법 2

awk '$0 ~ "{*}" {gsub (/{\*}/,"*",$0);print }'  filename

산출

name,apple,price,{50 70 80 80},color,*
name,orange,price,*,color,{80 30 40}

관련 정보