아래 문자열에서 중괄호를 제거하고 싶지만 *
중괄호가 그 사이에 있는 경우에만 가능합니다.
이 주제에 대해 많은 답변을 찾았지만 제 시나리오에서는 조건을 충족하는 중괄호만 제거하고 싶습니다 {*} --> *
.
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}